ASP.NET Identity 2.0:如何重新密码

Bri*_*Rak 7 .net c# asp.net-mvc hash asp.net-identity-2

我在ASP.NET 5.0 Web应用程序中将用户从旧用户存储迁移到ASP.NET Identity 2.0.我有一种验证遗留哈希的方法,但我想在登录时将它们升级到ASP.NET Identity 2.0哈希.

我创建了一个IPasswordHasher能够检测和验证遗留哈希的自定义,并PasswordVerificationResult.SuccessRehashNeeded在适当的时间返回.(如果它检测到散列不是遗留的,那么它只会进入内置的ASP.NET标识哈希验证.)

但是,返回PasswordVerificationResult.SuccessRehashNeeded似乎并不会导致ASP.NET Identity实际执行任何操作.当IPasswordHasher返回此结果时,是否存在某个配置选项会导致系统重新哈希密码?

如果上面的答案是否定的,那么我建议我只是手动重新哈希并更新用户吗?我会在哪里这样做?我没有在控制器级别看到任何可以看到PasswordVerificationResult的地方.

我是ASP.NET身份的新手,所以我确信我错过了一些简单的东西.提前感谢您的任何指示.

Sam*_*ari 6

似乎在内置的用户管理器中未实现哈希机制。但是希望您可以轻松实现。考虑一下:

public class ApplicationUserManager : UserManager<ApplicationUser>
{
    protected override async Task<bool> VerifyPasswordAsync(
          IUserPasswordStore<ApplicationUser, string> store, 
          ApplicationUser user, string password)
    {
        var hash = await store.GetPasswordHashAsync(user);
        var verifyRes = PasswordHasher.VerifyHashedPassword(hash, password);

        if (verifyRes == PasswordVerificationResult.SuccessRehashNeeded)
           await store.SetPasswordHashAsync(user, PasswordHasher.HashPassword(password));

        return verifyRes != PasswordVerificationResult.Failed;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在设置新的密码哈希值之后,您应该添加`await store.UpdateAsync(user);`,以将更新后的信息实际写回到数据库中。应该在相同的“ if”内完成,因此请记住将更新的代码放在方括号中。(顺便说一句,这是一个很好的理由,即使在块中最初只有一个语句的情况下,也总是在块语句的两边加上方括号。) (2认同)