ASP.Net身份手册密码哈希

时间:2014-02-03 14:52:51

标签: c# asp.net-mvc-5 password-protection asp.net-identity

我正在使用实体框架数据库优先方法使用现有数据库开发 MVC 5 Web应用程序。

我也在使用 ASP.Net Identity 进行授权和身份验证,但是,我没有使用内置的实体框架代码,即 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;
    }
}

这是我的问题:

Q1 :注册新用户帐户时,我会传递用户密码     从我的帐户控制器进入HashPassword方法,像这样,     我希望用户密码哈希并以字符串形式返回,     但是,我不知道要在 HashPassword 中输入什么代码     这样做的功能。

CustomPassword pwd = new CustomPassword();
String UserPassword = "test@123";
String HashedNewPassword = pwd.HashPassword(UserPassword);

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

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

感谢。

1 个答案:

答案 0 :(得分:22)

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

UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
UserManager.PasswordHasher = new CustomPasswordHasher(); // IPasswordHasher

使用UserManager查找用户名和密码。