ASP.Net身份手册密码哈希

tco*_*ode 17 c# password-protection asp.net-mvc-5 asp.net-identity

我正在使用Entity Framework Database First方法和现有数据库开发MVC 5 Web应用程序.

我也使用ASP.Net Identity进行授权和身份验证,但是,我没有使用内置的Entity Framework代码,即UserManager,ApplicationUser等,而是我使用的方法与Brock Allen类似.

http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/

我现在正在进行帐户登录和注册,我想在将用户密码存储到自定义用户表之前对其进行哈希处理.

我意识到我可以创建自己的自定义类来实现IPasswordHasher,但是,这就是我陷入困境的地方.下面显示了我认为它应该如何工作的模拟,但是,我并不完全确定这是正确的.

public class CustomPassword : IPasswordHasher
{
    public string HashPassword(string password)
    {
        return password;
    }

    public PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
    {
        if (hashedPassword.Equals(providedPassword))
            return PasswordVerificationResult.Success;
        else return PasswordVerificationResult.Failed;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是我的问题:

Q1:当我注册一个新的用户帐户并将我的帐户控制器中的用户密码传递给HashPassword方法时,我希望将用户密码哈希并作为字符串返回,但是,我不知道要放什么代码进入HashPassword 函数来做到这一点.

CustomPassword pwd = new CustomPassword();
String UserPassword = "test@123";
String HashedNewPassword = pwd.HashPassword(UserPassword);
Run Code Online (Sandbox Code Playgroud)

Q2:当用户登录网站时,我想提取他们提供的密码,从数据库用户表中检索哈希密码,然后在VerifyHashedPassword方法中对它们进行比较,但是,我不知道代码是什么是将散列字符串与非散列字符串进行比较.

我非常感谢有关如何做到这一点的任何建议.

谢谢.

jd4*_*d4u 22

创建UserManager实例后,将passwordhasher属性分配给CustomPasswordHasher

UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
UserManager.PasswordHasher = new CustomPasswordHasher(); // IPasswordHasher
Run Code Online (Sandbox Code Playgroud)

使用UserManager查找用户名和密码的用户.

  • UserManager.PasswordHasher.HashPassword(pass),我需要生成密码和MVC5机制一样. (16认同)