C# 设置machineKey后,表单身份验证立即停止工作

C# 设置machineKey后,表单身份验证立即停止工作,c#,asp.net,webforms,C#,Asp.net,Webforms,我正在为遗留WebForms 4.61应用程序和新开发的MVC应用程序设置SSO。下面使用本原件中引用的参考文献 WebForms应用程序中的web.config如下所示: <authentication mode="Forms"> <forms loginUrl="~/account/login" timeout="120" defaultUrl="~/" /> </authentication> <roleManager enabled="tru

我正在为遗留WebForms 4.61应用程序和新开发的MVC应用程序设置SSO。下面使用本原件中引用的参考文献

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 decryption="AES" validation="HMACSHA256" decryptionKey="AutoGenerate"  validationKey="AutoGenerate"  />

我可以登录,一切正常。但是,现在我想添加以下machineKey配置:

<machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />

要替换以下内容的默认行为(未指定时):


但是,一旦我将machineKey条目添加到web.config并重新运行应用程序,我就无法再登录。我使用标准的asp:Login控件来进行身份验证

为什么身份验证在我添加machineKey后立即停止工作


注:指定decryptKey和validationKey对行为没有影响,我无法登录。

为了完整性,我在@mjwills将我的答案发布在他引用的SO帖子上之后发布。最终我找到了这个帖子

它有一个链接,其中提到默认哈希算法更改为SHA256,这是对.NET4的一个重大更改。所以,当我在看以前写的文章时,他们谈到了SHA1

因此,如果您有一个.NET 4应用程序,那么在添加计算机密钥时需要做的就是指定如下:

<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 decryption="AES" validation="HMACSHA256" decryptionKey="AutoGenerate"  validationKey="AutoGenerate"  />


AES和HMACSHA256分别是用于解密和验证的密码的默认设置。

是否有特定原因要删除
IsolateApps
?“IsolateApps修饰符指定ASP.NET使用每个应用程序的应用程序ID为每个应用程序生成唯一的加密密钥”。由于我希望在应用程序中使用此规范,因此无法继续使用此规范。当您尝试登录时会发生什么情况?有帮助吗?因为我没有在会员资格中指定任何内容,但在machineKey中,这就是所使用的内容。虽然我看到我没有指定解密属性。嗯,你知道我的情况是SHA1还是AES吗?当我尝试登录时,我最终从asp:Login组件获得了LoginError事件。