【问题标题】:Forms authentication stops working as soon as I set the machineKey一旦我设置了 machineKey,表单身份验证就会停止工作
【发布时间】:2017-06-20 12:01:56
【问题描述】:

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

【问题讨论】:

  • 您是否有特定原因要删除IsolateApps
  • “IsolateApps 修饰符指定 ASP.NET 使用每个应用程序的应用程序 ID 为每个应用程序生成唯一的加密密钥”。因为我想在应用程序中使用它,所以我不能继续使用这个说明符。
  • 当您尝试登录时会发生什么? stackoverflow.com/questions/21731831/… 有帮助吗?
  • 因为我没有在成员资格中指定任何内容,而是在 machineKey 中指定正在使用的内容。虽然我看到我没有指定解密属性。嗯,,,你知道在我的情况下应该是 SHA1 还是 AES?当我尝试登录时,我最终会从 asp:Login 组件中获取 LoginError 事件。

标签: c# asp.net webforms


【解决方案1】:

为了完整起见,我在@mjwills 让我上路以使其与他引用的 SO 帖子一起工作后发布我的答案。最终我找到了这个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 是分别用于解密和验证的密码的默认设置。

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2019-09-08
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多