我们的应用程序使用cookie来记住用户登录。我们进行的每个auth API调用,浏览器都会将服务器设置的HTTPonly cookie与API请求一起附加,并进行身份验证。这种行为似乎在莫哈韦释放后的狩猎中被打破。
我了解到safari实现的跨站点cookie安全性,我们的服务器团队在设置cookie时添加了SameSite=None;Secure
。即使在那之后,它仍然不起作用。Set-Cookie: my_cookie=XXXXX; path=/; secure; HttpOnly; SameSite=None
请建议或提供链接的人谁实际上找到了解决方案。
7条答案
按热度按时间2izufjch1#
MacOS 10.14上的Safari版本和iOS 12上的所有浏览器都受this bug影响,这意味着
SameSite=None
被错误地视为SameSite=Strict
,例如最严格的环境。我在SameSite cookie recipes中发布了一些指导:
SameSite=None; Secure
和不支持SameSite=None; Secure
的浏览器。SameSite=None
服务。kq0g1dla2#
这也是Safari 14的问题。Safari不再默认发送第三方Cookie。这是因为他们引入了隐私偏好:“防止跨站点跟踪”,默认情况下已打开。因此,如果您使用
SameSite=None; Secure
设置Cookie,它们仍然不会被设置并跨域发送。lh80um4z3#
Safari不再发送跨站点Cookie。因此,即使cookie设置为SameSite=None,它也不会与第三方 AJAX 请求一起发送。
要允许发送跨站点Cookie,请转到
Safari > Preferences > Privacy
并取消选中Prevent cross-site tracking
tct7dpnv4#
问题不在于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
你需要在两者上都包含
Domain
,并为你的prod(ssl)env包含Secure
。您可以为SameSite
使用不同的值,但Lax
对我来说是有效的pb3skfrl5#
我试着在MAC OS中禁用“防止跨站点跟踪”选项(即,设置〉Safari〉隐私和安全〉防止跨站点跟踪-禁用),iframe开始工作。我知道这不是一个修复,但可能是一个快速的变通办法,为短时间。
hc8w905p6#
我一直在努力弄清楚饼干,因为第一次开始在我们的网站上工作。我终于想通了。在我们的服务器上,我们在express应用程序中使用了firebase会话,它们的初始化方式如下:
Cookie的设置对我们的iOS应用程序来说并不重要,但对我们的网站来说,我们有几个障碍。为了让它在桌面网站浏览器和Android上工作,我们必须将cookie设置为安全和httpOnly。但是,对于iOS移动的浏览器,cookie设置失败。问题是因为iOS上的移动的浏览器只使用第一方Cookie。我不得不为我们的API服务器添加一个CNAME,这是我们网站的一个子域,并直接调用该CNAME的API。然后,在我们的API中必须指定cookie的域(您必须显式地为cookie中允许的子域指定域)。这解决了它。
yfwxisqw7#
对于用Ruby编写的应用程序(特别是Rails、Sinatra或Rack上的任何东西),RailsSameSiteCookie gem很好地解决了这个问题和相关问题。代码读起来像是pseudocode in the Chromium discussion的近似翻译,没有脆正则表达式。