一旦我设置machineKey

时间:2017-06-20 12:01:57

标签: c# asp.net webforms

我正在使用新创建的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对行为没有影响,我无法登录。

1 个答案:

答案 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分别是用于解密和验证的密码的默认设置。