首页 > 解决方案 > SameSite cookie 属性丢失

问题描述

[更新-见最后评论]

Google 将更改其 Chrome 浏览器的行为,以便 cookie 在托管在另一个域的 IFRAME 中时不再起作用,除非 cookie 明确设置为 SameSite = None 和 Secure。

为此,我们在 ASP.NET MVC 代码中进行了此更改。我们有一些关于何时设置的逻辑(仅适用于我们同意合作的合作伙伴),所以我们有这个条件逻辑:

if (isSameSiteCookieEnforced)
{
    cookie.SameSite = SameSiteMode.None;
    cookie.Secure = true;
}

我们在我们的 DEV、QA、STAGE 环境中对此进行了测试,它运行良好。在 Chrome 的开发人员工具(应用程序 > Cookies)中,您可以检查 cookie 并查看它们都标记为安全,并且在 SameSite 列中没有。

但是,当我们将其滚动到我们的 PROD 环境时,使用相同的浏览器会得到不同的结果:cookie 被标记为安全,但 SameSite 值为空。

我们检查的内容:

目前有点不知所措,无法解释 cookie 如何丢失“SameSite”属性。导航到chrome://flags并在SameSite上进行过滤,我们将这三个设置显示为“默认”,因此 Chrome 不应影响从一个环境到另一个环境的任何不同。

更新

我们的 ASP.NET MVC 应用程序使用 IHttpModule,作为 EndRequest 方法的最后一步,我们跟踪 cookie。您可以清楚地看到它们设置为 SameSite=None 和 Secure=true。但是,当它们到达浏览器时,SameSite 属性已被剥离。

标签: asp.net-mvcgoogle-chromecookiessamesite

解决方案


如果您以是否强制执行新的 SameSite 行为为条件,您将需要使用 chrome://flags 条目 same-site-by-default-cookies 和 cookies-without-same-site-must-be- 来测试该行为安全设置为“启用”和“禁用”。如果它们设置为“默认”,则无法判断行为是什么。它可以打开或关闭,具体取决于启动时确定的随机种子,因为这些功能目前处于 Beta 版的现场试验(A/B 测试)中。在此处查看“启动时间表”中的第二个项目符号列表:https ://www.chromium.org/updates/same-site


推荐阅读