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

Jim*_*ell 27 asp.net asp.net-mvc asp.net-membership asp.net-mvc-3 asp.net-mvc-4

新的MVC4 RTM互联网应用程序模板使用SimpleMembership提供程序,如SimpleMembership所述

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

  1. 与我使用EF的数据库的其余部分进行更清洁的集成
  2. 开箱即用支持Azure和OAuth
  3. 使用最新的MVC4 RTM控制器/视图,无需修改
  4. 我一直觉得现有的会员实施对我需要的东西有点膨胀

所以我今天编写了一个SQL脚本,将现有ASP.Net Membership表中的数据迁移到新的Simple Membership表中.这可以在这里找到

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

所以我的问题是,因为我在旧的ASP.Net成员资格提供程序中使用"哈希"密码格式,并且用户原始密码无法恢复,我有什么选择让SimpleMembership提供程序正常工作.

我猜一些选项是:

  1. 让我的用户重置他们的密码
  2. 让SimpleMembership提供程序使用与旧的ASP.Net成员资格提供程序相同的密码算法.
  3. 恢复新的MVC 4 RTM互联网应用程序模板以使用旧的ASP.Net MemberShip提供程序.这对我来说是最不可取的选择,因为我想使用SimpleMemberShip框架.

我怀疑很多人也希望将现有的会员数据库迁移到新的SimpleMemberShip提供商.

任何帮助非常感谢.

干杯

吉姆

Jim*_*ell 12

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

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

谢谢保罗


Jer*_*rph 11

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

  1. 将旧密码保存在单独的表中
  2. 登录时,首先使用SimpleMembership方法
  3. 如果失败,请使用旧的哈希算法检查旧密码表(您需要确保明文密码仍在上下文中)
  4. 如果成功,请更新SimpleMembership表,然后从旧密码表中删除

用户不需要知道更改,活动用户将拥有更安全的哈希.如果您希望以后强制进行安全性升级,可以警告用户在一年不活动后将删除其帐户,并且只需退出两步系统.


Sig*_*ers 7

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

<system.web>

    <membership hashAlgorithmType="SHA1" defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" etc.../>
      </providers>
    </membership>
    <machineKey validation="SHA1" />
    ...
</system.web>
Run Code Online (Sandbox Code Playgroud)

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

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

希望这可以帮助!-Sig