在MVC4 RTM中从ASP.NET成员身份迁移到SimpleMembership

时间:2012-09-02 13:56:27

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-membership asp.net-mvc-4

新的MVC4 RTM互联网应用模板使用SimpleMembership提供商,如此处所述SimpleMembership

我现有的MVC网站使用ASP.Membership框架,理想情况下我想将这些表中的用户数据迁移到新的SimpleMembership表。我想要这样做的原因是:

  1. 与使用EF
  2. 的数据库的其余部分进行更清洁的集成
  3. 支持开箱即用的Azure和OAuth
  4. 使用最新的MVC4 RTM控制器/视图,无需修改
  5. 我一直觉得现有的会员实施对我需要的东西来说有点臃肿
  6. 所以我今天编写了一个SQL脚本,将现有ASP.Net Membership表中的数据迁移到新的Simple Membership表中。可以找到here

    在我的MVC 4网站上测试登录密码验证失败。我相信SimpleMembership使用与旧的Membership框架不同的密码算法,因为在SimpleMemberShip框架下创建的新密码看起来要长得多。

    所以我的问题是,因为我在旧的ASP.Net会员提供商中使用“哈希”密码格式,并且用户原始密码无法恢复,我有什么选择让SimpleMembership提供商工作。

    我猜一些选项是:

    1. 让我的用户重置密码
    2. 让SimpleMembership提供程序使用与旧的ASP.Net成员资格提供程序相同的密码算法。
    3. 还原新的MVC 4 RTM互联网应用程序模板,以使用旧的ASP.Net MemberShip提供程序。这对我来说是最不可取的选择,因为我想使用SimpleMemberShip框架。
    4. 我怀疑很多人也希望将现有的会员数据库迁移到新的SimpleMemberShip提供商。

      非常感谢任何帮助。

      干杯

      吉姆

3 个答案:

答案 0 :(得分:12)

我想表达保罗的评论,以防任何人错过它,并建议他的解决方案是我见过的最好的。

http://pretzelsteelersfan.blogspot.com/2012/11/migrating-legacy-apps-to-new.html

谢谢保罗

答案 1 :(得分:11)

用户登录时可以访问纯文本密码,这为您提供了另一个选项:

  1. 将旧密码保存在单独的表中
  2. 登录时,首先使用SimpleMembership方法
  3. 如果失败,请使用旧的哈希算法检查旧密码表(您需要确保明文密码仍在上下文中)
  4. 如果成功,请更新SimpleMembership表,然后从旧密码表中删除
  5. 用户无需了解更改,活动用户将拥有更安全的哈希。如果您希望以后强制进行安全性升级,可以警告用户,他们的帐户将在一年不活动后被删除,并且只需要退出两步系统。

答案 2 :(得分:7)

我有一个类似的问题,我应该写一篇关于这样做的教程/博客文章,但我的解决方案是将以下内容添加到我的web.config中(这对应于选项#2):

<system.web>

    <membership hashAlgorithmType="SHA1" defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" etc.../>
      </providers>
    </membership>
    <machineKey validation="SHA1" />
    ...
</system.web>

上面代码的有趣部分是“hashAlgorithmType”。将其设置为SHA1将使用旧的asp.net成员资格哈希算法。

我也处于类似的位置 - 我要么让我的用户更新他们的密码,要么保持特定的哈希算法。

希望这有帮助! -sig