Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MVC4 RTM中从ASP.NET成员身份迁移到SimpleMembership_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Asp.net Membership_Asp.net Mvc 4 - Fatal编程技术网

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

在MVC4 RTM中从ASP.NET成员身份迁移到SimpleMembership,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-membership,asp.net-mvc-4,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asp.net Membership,Asp.net Mvc 4,新的MVC4 RTM internet应用程序模板使用此处描述的SimpleMembership提供程序 我现有的MVC网站使用ASP.Membership框架,理想情况下,我希望将这些表中的用户数据迁移到新的SimpleMembership表中。我想这样做的原因是: 和使用EF的数据库的其余部分进行更干净的集成 对Azure和OAuth的开箱即用支持 使用最新的MVC4 RTM控制器/视图,无需修改 我一直觉得现有的会员制实现对于我所需要的东西来说有点臃肿 因此,我今天编写了一个SQL脚本,将

新的MVC4 RTM internet应用程序模板使用此处描述的SimpleMembership提供程序

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

  • 和使用EF的数据库的其余部分进行更干净的集成
  • 对Azure和OAuth的开箱即用支持
  • 使用最新的MVC4 RTM控制器/视图,无需修改
  • 我一直觉得现有的会员制实现对于我所需要的东西来说有点臃肿
  • 因此,我今天编写了一个SQL脚本,将现有ASP.Net成员资格表中的数据迁移到新的简单成员资格表中。这是可以找到的

    在我的MVC4网站中测试登录密码验证失败。我相信SimpleMembership使用的密码算法与旧的成员资格框架不同,因为在SimpleMembership框架下创建的新密码看起来要长得多

    因此,我的问题是,由于我在旧的ASP.Net成员资格提供程序中使用了“哈希”密码格式,并且用户的原始密码无法恢复,因此我必须使用哪些选项才能使SimpleMembership提供程序正常工作

    我猜有些选择是:

  • 让我的用户重置他们的密码
  • 使SimpleMembership提供程序使用与旧ASP.Net成员资格提供程序相同的密码算法
  • 恢复新的MVC4RTM internet应用程序模板以使用旧的ASP.Net成员资格提供程序。这是我最不想要的选项,因为我想使用SimpleMemberShip框架
  • 我怀疑许多人也在寻求将他们现有的成员数据库迁移到新的SimpleMemberShip提供程序

    非常感谢您的帮助

    干杯


    Jim

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

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

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

    希望这有帮助!
    -Sig

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

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

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

    我想公开Paul的评论,以防有人错过,并建议他的解决方案是我见过的最好的


    谢谢保罗

    谢谢西格,非常感谢,我相信其他人会觉得这很有用。最后,我将让用户使用新的SimpleMemberShip哈希重置密码。显然这比旧的SHA1算法更安全。嗨,西格。我尝试了你的解决方案,但它在我的项目中不起作用。对吗?非常感谢。嘿,机会,我觉得一切都很好。您是否遇到了特定的错误或问题?我喜欢这个想法,但我很难找到实现方法。你能再解释一下如何在成员身份上下文之间切换吗?@vinney你不会使用两个成员身份上下文-只是手动访问旧表中的原始数据。使用两个上下文可能是可能的,但如果我最终使用这种方法,我将直接访问旧表这里有一篇关于迁移的文章,它透明地处理散列中的差异。谢谢保罗,这是我见过的最好的解决方案。我将采用这个方法。我应该指出,只有当你的密码被散列时,这个方法才有效。如果它们是加密的,你必须自己解密密码,然后用Paul的技术保存它。我必须为我的网站这样做,所以当我弄明白密码后,我会在Paul的帖子上留下评论。好的,你可以找到我处理加密密码和散列密码的代码。您必须将my DecryptingSqlMembershipProvider与SimpleMembershipProvider一起添加到提供者列表中,才能使其工作。
    <system.web>
    
        <membership hashAlgorithmType="SHA1" defaultProvider="DefaultMembershipProvider">
          <providers>
            <add name="DefaultMembershipProvider" etc.../>
          </providers>
        </membership>
        <machineKey validation="SHA1" />
        ...
    </system.web>