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