asp.net-core - Identity Core 的密码历史记录

标签 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);
生成的密码哈希。

可能是我试图以错误的方式做到这一点。我在实现密码历史记录时犯了什么错误?

谢谢

最佳答案

每次都有不同的哈希值 - 这是默认实现的方式 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 - 它是带有一些用户信息的自定义表,如密码、电子邮件、姓名...

关于asp.net-core - Identity Core 的密码历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48783202/

相关文章:

c# - 将 IOptions 传递到 .Net 核心中间件类以进行 json 配置检索

asp.net-core - 如何在 EF Core 中添加父记录及其子记录

c# - 在多个 .NET Core 项目之间共享代码

ASP.NET MVC 5 默认 WebApp 忘记密码模块丢失?

c# - ASP.NET 标识和 SignalR

java - 如何使用Spring StandardPasswordEncode和Get Salt Generate?

PHP password_verify 似乎使用一个字符串而不是另一个被认为相等的字符串

http - 如何在 ASP.NET Core Controller 中接收 `multipart/mixed`

jvm - 隐藏或禁用 Tomcat 命令行参数日志记录

c# - 没有 Entity Framework 的 Asp.Net Owin 身份验证