SameSite cookie 属性 丢失
SameSite cookie property lost
[已更新 - 请参阅末尾的评论]
Google 将更改其 Chrome 浏览器的行为,这样当托管在另一个域的 IFRAME 中时 cookie 将不再起作用,除非 cookie 明确设置为 SameSite = None , 和安全。
为此,我们在 ASP.NET MVC 代码中进行了此更改。我们有一些关于何时设置它的逻辑(仅适用于我们同意与之合作的合作伙伴),所以我们有这个条件逻辑:
if (isSameSiteCookieEnforced)
{
cookie.SameSite = SameSiteMode.None;
cookie.Secure = true;
}
我们在 DEV、QA、STAGE 环境中对此进行了测试,它运行良好。在 Chrome 的开发人员工具(应用程序 > Cookies)中,您可以检查 cookie 并看到它们都被标记为安全,并且在 SameSite 列中有 None。
但是,当我们将其滚动到我们的 PROD 环境时,我们使用相同的浏览器得到不同的结果:cookie 被标记为安全,但 SameSite 值为空。
我们检查的内容:
- 负载均衡器:我们将其隔离并直接导航到单个 Web 服务器,结果相同
- 已安装的 .NET 框架:在所有环境中,我们都安装了 4.7.2 和 4.8
- 已解决 .NET 框架:在所有环境中,web.config 规定 4.7.2
- 代码:我们从 PROD 中检索了相关的 DLL,并使用 ILSPY 进行了检查。它包含上面的代码
目前有点不知所措,无法解释 cookie 是如何丢失 "SameSite" 属性 的。导航至 chrome://flags 并在 SameSite 上进行过滤,我们将三个设置显示为 "default",所以 Chrome 不应该影响从一个环境到另一个环境的任何不同。
更新
我们的 ASP.NET MVC 应用程序使用 IHttpModule,作为 EndRequest 方法的最后一步之一,我们跟踪了 cookie。您可以清楚地看到它们设置为 SameSite=None 和 Secure=true。但是,当他们到达浏览器时,SameSite 属性 已被删除。
如果您以是否强制执行新的 SameSite 行为为条件,您需要使用 chrome://flags 条目 same-site-by-default-cookies 和 cookies-without 来测试该行为-same-site-must-be-secure 设置为 "Enabled" 和 "Disabled"。如果将它们设置为 "Default",则无法判断行为是什么。它可以打开或关闭,具体取决于启动时确定的随机种子,因为这些功能目前正在 Beta 上进行现场试验(A/B 测试)。请在此处查看 "Launch Timeline" 中的第二个项目符号列表:https://www.chromium.org/updates/same-site
发现问题 - 结果是我们缺少 Windows 补丁。
[已更新 - 请参阅末尾的评论]
Google 将更改其 Chrome 浏览器的行为,这样当托管在另一个域的 IFRAME 中时 cookie 将不再起作用,除非 cookie 明确设置为 SameSite = None , 和安全。
为此,我们在 ASP.NET MVC 代码中进行了此更改。我们有一些关于何时设置它的逻辑(仅适用于我们同意与之合作的合作伙伴),所以我们有这个条件逻辑:
if (isSameSiteCookieEnforced)
{
cookie.SameSite = SameSiteMode.None;
cookie.Secure = true;
}
我们在 DEV、QA、STAGE 环境中对此进行了测试,它运行良好。在 Chrome 的开发人员工具(应用程序 > Cookies)中,您可以检查 cookie 并看到它们都被标记为安全,并且在 SameSite 列中有 None。
但是,当我们将其滚动到我们的 PROD 环境时,我们使用相同的浏览器得到不同的结果:cookie 被标记为安全,但 SameSite 值为空。
我们检查的内容:
- 负载均衡器:我们将其隔离并直接导航到单个 Web 服务器,结果相同
- 已安装的 .NET 框架:在所有环境中,我们都安装了 4.7.2 和 4.8
- 已解决 .NET 框架:在所有环境中,web.config 规定 4.7.2
- 代码:我们从 PROD 中检索了相关的 DLL,并使用 ILSPY 进行了检查。它包含上面的代码
目前有点不知所措,无法解释 cookie 是如何丢失 "SameSite" 属性 的。导航至 chrome://flags 并在 SameSite 上进行过滤,我们将三个设置显示为 "default",所以 Chrome 不应该影响从一个环境到另一个环境的任何不同。
更新
我们的 ASP.NET MVC 应用程序使用 IHttpModule,作为 EndRequest 方法的最后一步之一,我们跟踪了 cookie。您可以清楚地看到它们设置为 SameSite=None 和 Secure=true。但是,当他们到达浏览器时,SameSite 属性 已被删除。
如果您以是否强制执行新的 SameSite 行为为条件,您需要使用 chrome://flags 条目 same-site-by-default-cookies 和 cookies-without 来测试该行为-same-site-must-be-secure 设置为 "Enabled" 和 "Disabled"。如果将它们设置为 "Default",则无法判断行为是什么。它可以打开或关闭,具体取决于启动时确定的随机种子,因为这些功能目前正在 Beta 上进行现场试验(A/B 测试)。请在此处查看 "Launch Timeline" 中的第二个项目符号列表:https://www.chromium.org/updates/same-site
发现问题 - 结果是我们缺少 Windows 补丁。