Asp.net 生成PasswordHash和SecurityStamp

Asp.net 生成PasswordHash和SecurityStamp,asp.net,asp.net-identity,Asp.net,Asp.net Identity,我有一个新用户进入的注册表。稍后的过程将为该用户创建数据库,并从注册表中的数据(电子邮件和名称)插入ASP.NET标识用户记录 我想扩展它,以便在注册时,用户可以输入他们的密码,然后在新数据库中设置密码 为了正确地执行此操作,我需要创建一个SecurityStamp值,然后使用该值对密码进行加密,以获得PasswordHash。然后我将这些值存储在registrations表中,然后我可以在设置时将它们复制到用户的新数据库中,这样他们就可以使用注册的密码登录 如何执行此操作-生成Security

我有一个新用户进入的
注册
表。稍后的过程将为该用户创建数据库,并从注册表中的数据(电子邮件和名称)插入ASP.NET标识用户记录

我想扩展它,以便在注册时,用户可以输入他们的密码,然后在新数据库中设置密码

为了正确地执行此操作,我需要创建一个
SecurityStamp
值,然后使用该值对密码进行加密,以获得
PasswordHash
。然后我将这些值存储在registrations表中,然后我可以在设置时将它们复制到用户的新数据库中,这样他们就可以使用注册的密码登录


如何执行此操作-生成
SecurityStamp
,然后散列密码?

SecurityStamp
可以是任何随机的、不可重复的-
Guid.NewGuid()。ToString()
很好地完成了这项工作

对于密码散列
UserManager
具有为您执行密码散列的属性
PasswordHasher

var userManager = new UserManager(context);
var passwordHash = userManager.PasswordHasher.HashPassword("mySecurePassword");

Identity为您处理所有这些,您是否使用
UserManager
类?@DavidG注册时数据库不存在。我希望安全地存储密码,直到稍后的进程创建数据库,然后使用UserManager类创建初始用户帐户。Hmm。因此,我没有必要将SecurityStamp存储在registrations表中。我只需要散列密码并存储它,对吗?其次,如果我使用
contextA
对密码进行散列,然后将该值更新到
contextB
中用户表中的PasswordHash字段中,这无关紧要-正确吗?@Sean对所有帐户都正确。SecurityStamp中的更改将使所有用户的现有cookie无效-使他们再次登录。将密码哈希移动到其他位置不会影响密码。Salt与实际哈希一起嵌入到同一列中,实际哈希不依赖于任何存储实现。