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

时间:2015-01-05 18:46:46

标签: c# asp.net-identity

我正在将一个现有的网站移动到mvc,其中一个让我感到困惑的是用户数据的迁移,特别是密码,这些密码以纯文本形式存储(是的,我知道)。现在将其余的帐户信息移动到aspnet身份表很容易,但我现在需要哈希这些密码,我不知道如何在存储之前正确地哈希它们(使用tsql),如果我必须使用.net应用程序来哈希,我需要通过提供普通密码来调用哪个类,它会给我一个哈希值?

谢谢

1 个答案:

答案 0 :(得分:0)

您的应用程序似乎没有针对完整迁移进行设置,因此我有一个简单的解决方案,可以充分利用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,从而有效地迁移数据库。