从ASP.NET成员身份转换为新的ASP.NET Identity API

Dar*_*ryl 1 asp.net-mvc asp.net-membership asp.net-identity

我正在考虑将目前使用ASP.NET成员资格进行身份验证和授权的现有MVC 4转换为最近在VS 2013中发布的MVC 5等新的ASP.NET身份模型.除了升级到MVC 5之外,有没有人想过将应用程序转换为这个新框架所需的内容对现有用户的影响最小?

理想情况下,我想保留他们的密码哈希值和盐,以防止用户在转换后更改密码.此外,有人谈到将Federation作为一些客户端的备用登录,因此我也需要在新系统中使用声明功能.

对于任何反馈,我们都表示感谢.

roo*_*ess 5

迁移用户帐户基本上有两种基本方法:

  • 一下子:为了工作,哈希算法"配置"在两个系统上都需要相同(如果使用"单向哈希",通常是这样),因为你无法知道用户的密码在这种迁移过程中.您所能做的就是将数据从A复制到B.
  • "滚动":一次移动一个帐户,更具体地说,在登录阶段,当您碰巧知道用户的密码时,您可以使用它做任何事情(比如创建新的哈希并将其存储在其他地方) .但是,缺点是您需要保持新旧身份验证系统长时间运行(取决于所有用户登录需要多长时间).

如果您的MVC 4项目使用默认的"简单成员资格"提供程序,那么好消息是使用的散列算法是相同的.简单的成员资格是开源的,这里是加密代码:

https://github.com/aspnetwebstack/aspnetwebstack/blob/master/src/System.Web.Helpers/Crypto.cs

遗憾的是,新的身份系统不是开源的,但事实证明它使用相同的算法(耶!) - 只需复制一个密码哈希它就可以工作(不要担心盐 - 它包含在哈希"blob")!!! 因此,"批量"迁移绝对是可能的.

但是,我强烈建议你不要这样做.新的身份系统似乎不断变化,所以也许等待几周是一个好主意.例如,源代码可能变得可用(因此我终于可以看到"SecurityStamp"值如何工作以及它的用途:)

OTOH,如果您使用的是旧的"预简单成员资格"(MVC4之前)身份验证,它会使用完全不同的哈希算法(SHA256,IIRC),因此无法快速迁移 - 您必须等待为您的所有用户登录以将其帐户移动到新系统.(当然,您可以通过向他们发送信息性的电子邮件来加速这个过程,该电子邮件说明为什么他们应该尽快这样做:)

我希望这有帮助.

Wrt Federation - 我不知道:)