27

新的 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 Membership 提供程序相同的密码算法。
  3. 恢复新的 MVC 4 RTM Internet 应用程序模板以使用旧的 ASP.Net MemberShip 提供程序。这对我来说是最不理想的选择,因为我想使用 SimpleMemberShip 框架。

我怀疑很多人也在寻求将他们现有的会员数据库迁移到新的 SimpleMemberShip 提供商。

非常感谢任何帮助。

干杯

吉姆

4

3 回答 3

12

我想提出保罗的评论,以防有人错过,并建议他的解决方案是我见过的最好的。

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

谢谢保罗

于 2012-11-19T00:09:17.410 回答
11

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

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

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

于 2012-11-07T13:46:53.753 回答
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 成员哈希算法。

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

希望这可以帮助!-西格

于 2012-09-07T03:41:25.283 回答