Internet Explorer/Edge(非铬)在 SameSite=None 安全时添加额外的 SameSite=Lax

Internet Explorer/Edge (not chromium) add additional SameSite=Lax when SameSite=None Secure

我在 Microsoft Dynamics 页面的 iframe 中加载了 .NET MVC 应用程序。 最初,用户将打开主页。家庭控制器重定向到登录页面:

return RedirectToAction("Index", "Login", new { returnUrl = redirectURL, error = errorMessage });

在本次更新 KB4533002 Cumulative Update for .NET SameSite 为 None 或未指定时添加 SameSite=Lax 之前是可以的。 然后我在网络配置中添加了出站规则以发送 SameSite=None;安全.

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

这适用于 Chrome、Firefox 和最新的 Edge。

但是 Internet Explorer 和 Edge(不是 Chromium)正在添加额外的 SameSite:

HttpOnly: true
path:/
SameSite: Lax
SameSite: None
Secure: true

Screenshot from Edge Developer Tools

有人知道如何防止这种情况发生吗?

这可能是因为默认的 SameSite 设置为松散。您可以尝试根据 this link:

设置 (SameSiteMode)(-1) 来删除 SameSite 属性

On systems where these updates have been applied, you can specify the previous behavior by setting the SameSiteMode to (SameSiteMode)(-1). You can specify this behavior using the string Unspecified in web.config.

更多设置方法请参考this article and this answer

此外,还有两个类似的话题可以参考:

谢谢周宇。这很有帮助,但我将其设置为 None.

而不是 Unspecified
<sessionState mode="SQLServer" sqlConnectionString="***" ... cookieless="UseCookies" cookieSameSite="None" />

出站规则 (SameSite=None; Secure) 对我有用。