36

我们的应用程序使用 cookie 来记住用户登录。我们进行的每个身份验证 API 调用,浏览器都会在 API 请求中附加服务器设置的 HTTPonly cookie 并获得身份验证。在 Mojave 发布后,这种行为似乎在 safari 中被打破。

我读到了 safari 实现的跨站点 cookie 安全性,我们的服务器团队SameSite=None;Secure在设置 cookie 时添加。即使在那之后,它仍然不起作用。

Set-Cookie: my_cookie=XXXXX; path=/; secure; HttpOnly; SameSite=None

请建议或提供实际找到解决方案的人的链接..

4

5 回答 5

36

MacOS 10.14 上的 Safari 版本和 iOS 12 上的所有浏览器都受到此错误的影响,这意味着它SameSite=None被错误地视为SameSite=Strict,例如最严格的设置。

我在SameSite cookie 食谱中发布了一些指南:

  • 使用两组 cookie 来说明支持SameSite=None; Secure和不支持的浏览器。
  • 嗅探用户代理以查找不兼容的浏览器并且不SameSite=None为这些请求提供服务。
于 2019-10-31T22:54:52.773 回答
4

这也是 Safari 14 中的一个问题。默认情况下,Safari 不再发送第三方 cookie。这是因为他们引入了隐私偏好:默认情况下打开的“防止跨站点跟踪”。因此,如果您设置 cookie,SameSite=None; Secure它们仍然不会被设置并跨域发送。

于 2021-07-15T10:18:59.240 回答
3

问题不在于 Safari 是否发送 cookie,而在于 Safari 不存储 cookie。这与 cookie 配置的特定组合有关,它与 localhost 的此设置一起使用

Set-Cookie: your=cookie; Domain=localhost; Path=/; Expires=Mon, 26 Dec 2022 12:53:02 GMT; HttpOnly; SameSite=Lax

和这个用于产品的设置

set-cookie: your=cookie; Domain=something.com; Path=/; Expires=Thu, 22 Dec 2022 04:17:44 GMT; HttpOnly; Secure; SameSite=Lax

您需要同时包含DomainSecure您的 prod (ssl) 环境中。您可以使用不同的值,SameSite但这Lax对我有用

于 2021-12-31T20:22:00.083 回答
1

我尝试在 MAC OS 中禁用“防止跨站点跟踪”选项(即,设置 > Safari > 隐私和安全 > 防止跨站点跟踪 - 已禁用)并且 iframe 开始工作。我知道这不是解决办法,但可能是短时间内的快速解决方法。

于 2021-09-02T06:35:53.890 回答
0

对于用 Ruby 编写的应用程序(特别是 Rails、Sinatra 或 Rack 上的任何东西),RailsS​​ameSiteCookie gem很好地解决了这个问题和相关问题。该代码读起来就像Chromium 讨论中伪代码的近似翻译,没有脆弱的正则表达式。

于 2020-02-20T19:30:30.623 回答