将纯文本密码迁移到 asp.net 身份 2.1

本文关键字:net 身份 asp 文本 密码 迁移 | 更新日期: 2023-09-27 18:36:13

我正在将现有站点移动到 mvc,让我困惑的一件事是用户数据的迁移,尤其是密码,这些密码存储为纯文本(是的,我知道)。 现在将其余帐户信息移动到 aspnet 标识表很容易,但我现在需要对这些密码进行哈希处理,并且我不确定如何在存储之前正确哈希它们(使用 tsql),如果我必须使用 .net 应用程序进行哈希处理,我需要通过向其提供纯密码来调用哪个类,它会给我一个哈希?

谢谢

将纯文本密码迁移到 asp.net 身份 2.1

您的应用程序似乎没有为完整迁移做好准备,因此我有一个想法,即一个简单的解决方案来充分利用 Identity 2.0 数据库和功能。

创建新的 Web 应用程序,然后创建一个获取旧用户的纯文本登录成分的方法。下一个:

创建新应用程序时,请查看帐户/注册文件中的代码。

以下是您看到的内容:

    var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
    var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
    var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };
    IdentityResult result = manager.Create(user, Password.Text);
    if (result.Succeeded)
    {
    }

现在创建一个类来保存现有用户的所有属性,或者如果你想循环读取器的溃败,你可以使用 SQLDataReader["columnName"]

因此,复制该代码运行您的新方法:

   var ListOfUsers = MyMethodThatRetunsAllOldMembers();
   foreach member in ListOfUsers{
    var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
    var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
    var user = new ApplicationUser() { UserName = Member.UserName, Email = Member.Email };
    IdentityResult result = manager.Create(member.LoginName, Member.Password);

    //Example: You can even add roles at the same time.
    var ra = new RoleActions();
    ra.AddUserToRoll(member.LoginName, Member.Email, userRole);
    }

这将为每个旧用户创建新的散列密码以及设置角色和用户 ID,从而有效地迁移数据库。