我正在使用新创建的MVC应用程序为遗留的WebForms 4.61应用程序设置SSO。继续使用原始SO Post中引用的参考文献。
WebForms应用程序中的web.config如下所示:
<authentication mode="Forms">
<forms loginUrl="~/account/login" timeout="120" defaultUrl="~/" />
</authentication>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<httpRuntime targetFramework="4.6.1" maxRequestLength="20480" requestValidationMode="2.0" executionTimeout="300" />
我可以登录,所有内容都符合预期。现在我想添加以下machineKey配置:
<machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
替换默认行为(当未指定任何内容时):
<machineKey decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" validationKey="AutoGenerate,IsolateApps" />
但是,只要将machineKey条目添加到web.config并重新运行应用程序,我就无法再登录。我正在使用标准的asp:Login控件进行身份验证。
为什么我在添加machineKey后立即停止运行?
PS。指定decryptKey和validationKey对行为没有影响,我无法登录。
答案 0 :(得分:1)
为了完整起见,我在@mjwills让我走上正确的道路之后发布了我的答案。最终我找到了这个SO帖子。
它有一个指向http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash----.net-3.5-to-.net-4.aspx的链接,它提到默认的哈希算法更改为SHA256,作为对.NET 4的重大更改。因此,当我关注编写的旧文章时,他们谈论SHA1。
因此,如果您有一个.NET 4应用程序,那么在添加机器密钥时您需要做的就是如下所示:
<machineKey decryption="AES" validation="HMACSHA256" decryptionKey="AutoGenerate" validationKey="AutoGenerate" />
AES和HMACSHA256分别是用于解密和验证的密码的默认设置。