我有一个带有.NETFramework 4.6,具有AzureAD身份验证和OpenID Connect协议的asp.net mvc4应用程序。现在,随着Chrome80 SameSite = None更新的最新更新,应用程序身份验证失败。
我使用了下面提到的使用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,则在应用程序身份验证失败的情况下。
谁能帮助我知道如何解决此问题?
似乎您正在将Chrome标志(chrome://flags/#same-site-by-default-cookies
)与Chrome企业策略-LegacySameSiteCookieBehaviorEnabled
混在一起。
Chrome企业策略适用于维护旧版应用程序的组织,这些应用程序中的cookie难以轻易更新。通过将其设置为LegacySameSiteCookieBehaviorEnabled
,您将明确维护cookie的旧行为。如果这确实是您想要做的,我将看一下更具体的1
。
但是,由于您尝试更新您的应用程序,因此我将确保您没有设置任何策略,以便可以确保实施新行为。您可以访问LegacySameSiteCookieBehaviorEnabledForDomainList
policy,如果所有行均为绿色,则将在浏览器中启用新行为。
我不确定您的Cookie规则,但是我看不到您将LegacySameSiteCookieBehaviorEnabledForDomainList
明确添加到https://samesite-sandbox.glitch.me Cookie中。这两个都必须设置。我还要确保您不只是将Secure
添加到每个单独的cookie中。只需对您知道需要从第三方上下文访问的对象执行此操作。对于其他cookie,请考虑SameSite=None
。
[如果需要查看请求中阻止了哪些cookie,可以在Chrome DevTools中检查“网络”标签。具体来说,选择一个请求并检查其中的cookie选项卡。您可以在SameSite=None; Secure