Gay*_*yan 6 password-encryption asp.net-identity asp.net-core
密码历史记录有默认实现吗?我正在尝试在我的项目中使用身份来实现该功能,因此我添加了包含密码哈希值的密码历史表。当用户更改密码时,usermanager 会生成密码的哈希值。
var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
如果此哈希未插入密码历史表中,则允许更改密码,否则返回错误
但问题是每次为特定密码生成哈希值时,它都会生成随机哈希值,这些随机哈希值也无法比较
var passwordHash = _userManager.PasswordHasher.HashPassword(user, newPassword);
哈希值不同于
_userManager.ResetPasswordAsync(user, request.Token, password);
生成的密码哈希。
可能是我试图以错误的方式做到这一点。我在实现密码历史记录时犯了什么错误?
谢谢
小智 8
每次都有不同的哈希值 - 这就是默认实现的工作原理IPasswordHasher。有关更多详细信息,请参阅此答案:/sf/answers/1443569991/。
因此,对于您的实施密码历史记录,您可以IPasswordHasher使用方法实施或仅使用所有存储的密码哈希值验证新密码
PasswordVerificationResult VerifyHashedPassword(TUser user, string hashedPassword, string providedPassword);
Run Code Online (Sandbox Code Playgroud)
仅举个例子:
var passAlreadyExist = user.UserHistory
.Select(h => h.PasswordHash)
.Distinct()
.Any(hash =>
{
var res = manager.PasswordHasher.VerifyHashedPassword(user, hash, password);
return res == PasswordVerificationResult.Success;
});
Run Code Online (Sandbox Code Playgroud)
其中UserHistory- 它是自定义表,其中包含一些用户信息,例如密码、电子邮件、姓名......
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |