密码身份核心的历史记录

时间:2018-02-14 09:02:57

标签: asp.net-core asp.net-identity password-encryption

是否有密码历史记录的默认实现?我正在尝试使用身份在我的项目上实现该功能,因此我添加了包含密码哈希的密码历史记录表。当用户更改密码时,usermanager会为密码生成哈希值。

var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);

如果此密码未插入密码历史记录表中,则允许更改密码,否则返回错误

但问题是每次为特定密码生成哈希时它会产生无法比较的随机哈希

var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);

哈希与

不同

_userManager.ResetPasswordAsync(user, request.Token, password);

生成密码哈希。

可能是我试图以错误的方式做到这一点。我实施密码历史的错误是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

每次都有不同的哈希值-这就是默认实现IPasswordHasher的工作方式。请查看以下答案以获取更多详细信息:https://stackoverflow.com/a/20622428/6104621

因此,对于您的实施密码历史记录,您可以实施IPasswordHasher或仅使用方法PasswordVerificationResult VerifyHashedPassword(TUser user, string hashedPassword, string providedPassword);用所有存储的密码哈希验证新密码

例如:

var passAlreadyExist = user.UserHistory
                .Select(h => h.PasswordHash)
                .Distinct()
                .Any(hash =>
                {
                    var res = manager.PasswordHasher.VerifyHashedPassword(user, hash, password);
                    return res == PasswordVerificationResult.Success;
                });

其中UserHistory-这是自定义表,其中包含一些用户信息,例如密码电子邮件名称 ...