0

我有一个带有 .NETFramework 4.6 的 asp.net mvc4 应用程序,带有 AzureAD 身份验证和 OpenID Connect 协议。现在随着 Chrome80 SameSite=None update 的最新更新,应用程序身份验证失败。

这是测试说明: https ://docs.microsoft.com/en-us/office365/troubleshoot/miscellaneous/chrome-behavior-affects-applications#testing-guidelines

我使用了下面提到的文章,它使用 URLRewrite 模块来设置 SameSite=None :

https://blog.elmah.io/the-ultimate-guide-to-secure-cookies-with-web-config-in-net/

<system.webServer>
  <rewrite>
   <outboundRules>
        <rule name="Remove Server Header">
          <match serverVariable="RESPONSE_Server" pattern=".+" />
          <action type="Rewrite" value="" />
        </rule>
        <rule name="Add SameSite" preCondition="No SameSite">
          <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
          <action type="Rewrite" value="{R:0}; SameSite=None" />
        </rule>
        <preConditions>
          <preCondition name="No SameSite">
            <add input="{RESPONSE_Set_Cookie}" pattern="." />
            <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=None" negate="true" />
          </preCondition>
        </preConditions>
</outboundRules>
  </rewrite>
  ...
</system.webServer>

将 Chrome 浏览器中的标志更新为已启用:

在此处输入图像描述

将注册表中 LegacySameSiteCookieBehaviorEnabled 的值设置为 1 会导致应用程序身份验证成功,但如果将 LegacySameSiteCookieBehaviorEnabled 设置为 0 ,则以防应用程序身份验证失败。

谁能帮我知道如何解决这个问题?

4

1 回答 1

1

您似乎正在将 Chrome 标志 ( chrome://flags/#same-site-by-default-cookies) 与 Chrome 企业政策 -混合使用​Legacy​Same​Site​Cookie​Behavior​Enabled

Chrome 企业政策适用于维护 cookie 不易更新的旧版应用程序的组织。通过将其设置为1您明确维护 cookie 的旧行为。如果这确实是您想要做的,我会查看更具体的LegacySameSiteCookieBehaviorEnabledForDomainList政策

但是,由于您正在尝试更新您的应用程序,我会确保您没有设置任何策略,以便您可以确保执行新行为。您可以访问https://samesite-sandbox.glitch.me,如果所有行都是绿色的,那么您的浏览器中启用了新行为。

我不确定您的 cookie 规则,但是我没有看到您明确添加Secure到您的SameSite=Nonecookie 中。这两个都必须设置。我还将确保您不会简单地添加SameSite=None; Secure到每个单独的 cookie 中。只需为您知道需要从第三方上下文访问的人执行此操作。对于其他 cookie,请考虑SameSite=Lax.

如果您需要查看哪些 cookie 被请求阻止,您可以查看 Chrome DevTools 中的网络选项卡。具体来说,选择一个请求并检查其中的 cookie 选项卡。您可以在https://www.chromium.org/updates/same-site/test-debug上找到详细说明

于 2020-02-14T12:06:13.467 回答