1

我正在考虑将当前使用 ASP.NET 成员身份进行身份验证和授权的现有 MVC 4 转换为新的 ASP.NET Identity 模型,该模型现在在 MVC 5 中可用,以及最近随 VS 2013 发布的类似模型。除了升级到 MVC 5,是否有人对将应用程序转换为对现有用户影响最小的新框架需要什么想法?

理想情况下,我想保留他们的密码哈希和盐,以免在转换后强迫用户更改密码。此外,有人谈到将联邦作为某些客户端的备用登录名,因此我也需要在新系统中使用声明功能。

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

4

1 回答 1

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——我不知道 :)

于 2013-10-23T18:58:58.010 回答