Safari 在请求中不包括 cookie,但 Safari incognito 呢?

Safari not including cookies in request, but Safari incognito does?

因此,对于我的应用程序,我允许我们的用户设置他们自己的自定义域,该域指向我们在 netlify 上托管的应用程序。这工作正常,但现在前端显然正在与生活在不同域中的 api 对话。

在我从 api 发回的身份验证 cookie 上,我有 SameSite=None 它适用于所有其他浏览器,但请求不包含 cookie 的 safari 浏览器除外。但是,如果我以隐身模式继续使用 Safari,它会在请求中包含 cookie 吗?我的问题是:

  1. 为什么这在 safari 隐身浏览器中有效而不正常?
  2. 有没有办法在正常的 safari 中进行这项工作?

这是一个更详尽的示例:

front end: 
customersdomain.com

api:
api.myapp.com

Cookie

x-refresh: <cookie_val>
SameSite: none
HttpOnly: true
Secure: true
expires: 1 month
domain: api.myapp.com

我的 cors 也允许设置凭据,并且在请求中我将 credentials 设置为 include

在 Safari 13.1 中,为了让第三方请求访问 credentials/cookies,您必须使用 Storage Access API 来请求访问,通过iframe.

这可能会显着影响您应用的运行。请阅读 WebKit 的 recent blog post 以了解有关其智能跟踪预防的最新更改的更多信息。

在 Safari 13.1 之前,有一些临时的兼容性修复,详见 here 以允许第三方请求访问 cookie。我的猜测是第三方域被您设备上的 Safari 标记为有可能跟踪用户的域,并且默认情况下被阻止访问 cookie。只要您不清除 Safari 上的缓存,该域就会一直被阻止。通过使用隐身 window,域不再被该会话阻止。

SameSite=None 兼容性已添加到 Safari 13,因此这不应该导致您的任何问题。