2017-05-29 104 views
0

我无法找到为身份.net核心禁用自动哈希密码的方式。 因为这段代码自动散列密码:如何禁用身份.net核心的自动哈希密码

var result = await _userManager.CreateAsync(user, model.Password); 
+3

为什么要禁用它?密码应该**总是**被散列。 – DavidG

+0

您是否真的想将所有密码公开给黑客并成为下一次公开数据泄露?你确定你的公司能活下来吗? –

+0

你是否试图执行密码恢复?这是非常不安全的,这就是为什么它不再在.NET中可用,而不仅仅是.NET Core。现今使用的最低限度是密码重置。 –

回答

1

你可以编写覆盖UserManager

public class ApplicationUserManager : UserManager<IdentityUser> 
{ 
    public ApplicationUserManager(IUserStore<IdentityUser> store) 
     : base(store) 
    { 
     this.PasswordHasher = new CustomPasswordHasher(); 
    } 

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    { 
     var manager = new ApplicationUserManager(new UserStore<IdentityUser>(context.Get<ApplicationDbContext>()));   

     manager.PasswordHasher = new CustomPasswordHasher(); 
    } 
} 

一类,然后覆盖PasswordHasher与继承PasswordHasher一个新的自定义散列器类。

internal class CustomPasswordHasher : PasswordHasher 
{ 
    public override string HashPassword(string password) 
    { 
     return password; 
     //return Crypto.Sha1.Encrypt(password); 
    } 

    public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword) 
    { 
     //var testHash = Crypto.Sha1.Encrypt(providedPassword); 
     return hashedPassword.Equals(testHash) || hashedPassword.Equals(providedPassword) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed; 
    } 
} 

最后,请记住,这样做会导致数据库用户的安全性丧失。

+2

告诉某人如何导致密码破坏不是一个好主意。这相当于向某人解释如何自杀。是的,他确实问过,那是什么? –

+0

我了解安全。它只需要客户。 您的代码有一些问题。没有看到这个类:IdentityFactoryOptions和IOwinContext。 –

+0

@ DmitryVasilyukJust3F您的客户已经在黑客名单中。将SO帐户名称追溯到公司及其客户并不困难。如果您坚持禁用密码安全性,请绝对确保客户在发生数据泄露时免除责任。是不是一个不安全的密码重置机制对他们有价值? –

0

由于Asp.NET核心MVC使用依赖注入来设置标识,所有你需要的仅仅是创建密码哈希类的替代:

public class CustomPasswordHasher : IPasswordHasher<AppUser> 
{ 
    public string HashPassword(AppUser user, string password) 
    { 
     return password; 
    } 

    public PasswordVerificationResult VerifyHashedPassword(AppUser user, string hashedPassword, string providedPassword) 
    { 
     return hashedPassword.Equals(providedPassword) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed; 
    } 
} 

,并添加:

services.AddScoped<IPasswordHasher<AppUser>, CustomPasswordHasher>(); 

你mvc app statup.cs