ASP.NET Owin身份覆盖密码生成

时间:2016-08-18 22:24:37

标签: c# asp.net encryption asp.net-identity owin

我在我的网站上使用ASP.NET身份OWIN进行用户身份验证。来自.Net的默认库会在创建用户时散列密码并将其存储在ASPNETUSERS表中。我想覆盖密码生成过程并使用我的自定义加密类加密密码。我想这样做的原因是,我希望能够在密码存储在我的表中后对其进行解密。我假设我还需要覆盖用户登录的内容,因此它可以加密密码并相应地进行比较。你能指出我正确的方向来覆盖哪个方法,或者要覆盖哪个接口/类来实现这个目的?或者,如果有另一种方式吗?

2 个答案:

答案 0 :(得分:3)

理想情况下,您希望对密码使用哈希(单向加密)算法。好吧,如果你真的想加密它,你可以将CustomPasswordHasher分配给 UserManager 实例。

_userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
_userManager.PasswordHasher = new CustomPasswordHasher();

实施

public class CustomPasswordHasher : IPasswordHasher
{
    public string HashPassword(string password)
    {
        // Custom encrypted password
    }

    public PasswordVerificationResult VerifyHashedPassword(
        string hashedPassword, string providedPassword)
    {
        if (hashedPassword.Equals(providedPassword))
            return PasswordVerificationResult.Success;
        return PasswordVerificationResult.Failed;
    }
}

答案 1 :(得分:0)

您可以简单地使用自己的验证方法获取密码,并在验证给定密码后使用SignInManager.SignInAsync。但正如托马斯所说,你不应该解密密码。