我的任务是确保用户在更改密码时不能使用以前的密码。为此,当标识框架对密码进行哈希处理时,我会存储其密码的哈希。
我的问题是如何比较用户新选择的密码的哈希值和我保存的他们以前使用的密码的哈希值? 我需要考虑标识框架正在使用的盐。
更新:我正在使用appUserManager.PasswordHasher.HashPassword(passwordToHash)
来哈希密码,但它每次都会创建一个新的哈希(我认为这是因为身份框架在内部使用盐)。
用户的当前密码哈希存储在表/列AspNetUsers.PasswordHash
中。这也可以通过 EF: ApplicationDbContext.Users.PasswordHash
获得。
因此,您需要创建自己的表来引用用户表,并在每次密码更改时将以前的哈希复制到表中。
下一步是验证新密码是否与任何旧哈希不匹配。为此,您需要使用Microsoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword(string hashedPassword, string providedPassword)
其中hashedPassword
将是历史哈希表中的值,providedPassword
将是新的建议密码。