IIS7 和 ASP.NET 加密系统差异

IIS7 和 ASP.NET 加密系统差异

我有一个应用程序最近从 IIS6(Windows 2003)(7 经典管道)移植到 IIS7(Windows 2008)集成管道。

我注意到的问题是,当我们尝试登录 IIS7 系统时,在 IIS6 系统上构建的密码哈希不再匹配。但是,当我们在 IIS7 系统上重新生成哈希时,它就可以正常工作。

我从某处读到,这两者(2003/2008)及其各自的 IIS 版本之间的加密系统存在差异,但我找不到任何其他信息。

我在这里很茫然,我需要现有的哈希才能在新系统上工作,但我似乎找不到起点。

如果有人知道任何可以帮助解决这个问题的资源、设置或其他东西,我将不胜感激。

答案1

.NET 中的许多加密功能都依赖于 machineKey,该密钥可以存储在 web.config 或 machine.config 中。如果您需要多个或其他 IIS 服务器才能加密/解密相同的共享数据,则必须将所有服务器配置为使用相同的 machineKey。

“如果您使用会员功能,密码哈希值默认存储在会员数据库中。会员系统还支持加密密码。如果您选择加密密码格式,则<machineKey>在加密和解密数据时将使用这些设置。”
参考:http://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_membership

如果您已经指定了 machineKey,则默认算法可能存在问题,这是 .Net 4.0 中的重大更改。默认值现在是 SHA256;您可能需要在 machineKey 验证属性上将其改回 SHA1,并在成员资格部分指定 hashAlgorithmType:

<system.web>
  <membership defaultProvider="myMembership" hashAlgorithmType="SHA1">
  ...
</system.web>

关联
https://stackoverflow.com/questions/3438197/hashing-no-longer-works-in-net-4-0-despite-msdn-workarounds
http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#0.1__Toc256770148

相关内容