SameSite cookie 被阻止
Posted
技术标签:
【中文标题】SameSite cookie 被阻止【英文标题】:SameSite cookie being blocked 【发布时间】:2020-12-09 17:15:55 【问题描述】:快速概览: 我在 domain1 打开我的网站。在页面内,我加载了一个带有 url http://domain2/...
的 iframe我不断在 chrome 上收到此警告,它影响了我的网站:
与 http://domain2 上的跨站点资源关联的 cookie 设置为没有
SameSite
属性。它已被阻止,因为 Chrome 现在仅在使用SameSite=None
和Secure
设置时才提供带有跨站点请求的 cookie。您可以在 Application>Storage>Cookies 下的开发者工具中查看 cookie,并在 https://www.chromestatus.com/feature/5088147346030592 和 https://www.chromestatus.com/feature/5633521622188032 上查看更多详细信息。
我以前从未设置过 cookie,所以我不知道应该从哪里设置 cookie。我已经尝试在我的 domain2 nginx 配置中设置 proxy_cookie_path
,但它似乎不起作用:
location /
proxy_cookie_path / "/; SameSite=None; Secure";
我还尝试添加 Set-Cookie
标头,这似乎也不起作用:
location /
...
add_header 'Set-Cookie' 'SameSite=None; Secure';
当我尝试第二种解决方案时,似乎从 chrome 上的响应中收到了标头,但 chrome 给出了以下警告:
请注意,domain2 也是我们的域,它有一个使用 Flask 框架的 python 后端。那么我应该从 python 代码或 javascript 前端添加 cookie 吗?
这真是令人沮丧。
【问题讨论】:
尝试在服务器的响应中使用SameSite=Strict
。
@Liju 这个不拦截跨域的请求吗?
它会的,如果你想在 domain1 中使用 domain2 cookie,按照这个 chromium blog 你需要将 cookie 设置为 Set-Cookie: name=value; SameSite=None; Secure;
用于 chrome,并且在你提供的屏幕截图中没有 cookie价值对。请检查是否是问题所在。
【参考方案1】:
跨站点资源共享 - 当请求通过同一域发送时,CORS 是一个已知问题。您可以尝试使用已经存在的flask cors package 来允许同源请求。
此外,this 问答似乎与您的相关。
【讨论】:
【参考方案2】:我在 server
和 location
块中使用了这个 proxy_cookie_flags ~ secure samesite=none;
,它起作用了。
【讨论】:
以上是关于SameSite cookie 被阻止的主要内容,如果未能解决你的问题,请参考以下文章
❲知多少❳再见,CSRF:讲解set-cookie中的SameSite属性
如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]
如果第三方 cookie 被阻止,则使用 oidc-client 跨域进行静默续订