临时保存密码在DB ASP.NET核心中



我正在开发.net core app Identity。我想实现用户注册。用户输入您的数据登录/密码等。下一步我需要确认电子邮件,我不想在他确认电子邮件之前创建用户,因为我需要为他创建新的DB。我想将数据保存到DB中的临时表。确认后,我将从那里获取数据并继续注册,然后从临时表中删除记录。

但是,正如我所看到的,身份具有清晰文本中的密码的方法userManager.Create(user, password)

我需要哈希/dehash密码算法吗?如果是,那是什么?将安全密码存储在临时表中的最佳方法是什么?

不,您不需要 - usermanager会在数据库中自动hash。

我认为创建临时记录不是好主意。只需创建用户,将其标记为不活动,直到他确认电子邮件为止。那是正确的方法。

一定要使用一些哈希算法。身份使用基于密码的密钥推导功能2(PBKDF2)-Wiki。这是示例哈希密码方法。

public static string HashPass(string pwd)
{
    byte[] salt;
    byte[] bytes;
    using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(pwd, 16, 1000))
    {
        salt = rfc2898DeriveByte.Salt;
        bytes = rfc2898DeriveByte.GetBytes(32);
    }
    byte[] num = new byte[49];
    Buffer.BlockCopy(salt, 0, num, 1, 16);
    Buffer.BlockCopy(bytes, 0, num, 17, 32);
    return Convert.ToBase64String(num);
}

更好的想法将被使用用户account表具有某些状态,您可以在其中存储有关用户帐户的状态:

public class UserAccount
{
   public int AccountId {  get; set;}
   public UserAccountStatus AccountStatus { get; set; }
}
public enum UserAccountStatus 
{
   Pending = 0,
   UsingTempPassword = 1
   Active = 2
}

所以,我做了以下操作:

1)生成用户的密码= null(第一个参数):

var hashPassword = _passwordHasher.HashPassword(null, command.Password);

2)当用户确认电子邮件时,我使用默认密码创建他,该密码通过Startup.cs类中的密码验证设置:

_userManager.CreateAsync(user, "123456");

3)更新passwordhash列和用户,并从步骤1开始进行值:

user.PasswordHash = command.PasswordHash;
_userManager.UpdateAsync(user);

我认为最好的是sha1 hash算法,标准为128位。我记得当我使用它的PHP论文时:)。它是最安全的。

使用表格身份验证(https://msdn.microsoft.com/en-us/library/t8yy6w3h.aspx):

<configuration>
<connectionStrings>
     <add name="SqlServices" connectionString="Data Source=MySqlServer;Integrated Security=SSPI;Initial Catalog=aspnetdb;" />
</connectionStrings>
<system.web>
  <authentication mode="Forms">
    <forms loginUrl="login.aspx" />
  </authentication>
  <authorization>
    <deny users="?" />
  </authorization>
  <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
  <providers>        
    <add name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="SqlServices"
      enablePasswordRetrieval="false"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="false"
      passwordFormat="Hashed"
      applicationName="/" />
  </providers>
</membership>
</configuration>
</system.web>

u只是更改实例名称和登录页面。默认哈希alg。是SHA1,它在.NET 4.0框架中更改为HMACSHA256或SHA256。你可以覆盖它:

<membership
    defaultProvider="provider name"
    userIsOnlineTimeWindow="number of minutes"
    hashAlgorithmType="SHA1">
    <providers>...</providers>
</membership>

您可以指定最大的.NET版本支持的.NET 4和最新版本是SHA512,但是默认值必须可以。

要添加您的您可以在此处阅读(如果您不想在全球范围内使用它,它只是一个.dll。

https://msdn.microsoft.com/en-us/library/693aff9y.aspx

使用会员资格。validate在日志上验证用户。

如果您使用了2013年的新MVC事物,则有Usermanager U仅实现您的用户持有电子邮件的用户,仅此而已,它一定是iuser。有一个方法usermanager.createuser(Tuser用户,字符串密码)

相关内容

  • 没有找到相关文章

最新更新