Safari 在请求中不包括 cookie,但 Safari incognito 呢?
Safari not including cookies in request, but Safari incognito does?
因此,对于我的应用程序,我允许我们的用户设置他们自己的自定义域,该域指向我们在 netlify 上托管的应用程序。这工作正常,但现在前端显然正在与生活在不同域中的 api 对话。
在我从 api 发回的身份验证 cookie 上,我有 SameSite=None
它适用于所有其他浏览器,但请求不包含 cookie 的 safari 浏览器除外。但是,如果我以隐身模式继续使用 Safari,它会在请求中包含 cookie 吗?我的问题是:
- 为什么这在 safari 隐身浏览器中有效而不正常?
- 有没有办法在正常的 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,因此这不应该导致您的任何问题。
因此,对于我的应用程序,我允许我们的用户设置他们自己的自定义域,该域指向我们在 netlify 上托管的应用程序。这工作正常,但现在前端显然正在与生活在不同域中的 api 对话。
在我从 api 发回的身份验证 cookie 上,我有 SameSite=None
它适用于所有其他浏览器,但请求不包含 cookie 的 safari 浏览器除外。但是,如果我以隐身模式继续使用 Safari,它会在请求中包含 cookie 吗?我的问题是:
- 为什么这在 safari 隐身浏览器中有效而不正常?
- 有没有办法在正常的 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,因此这不应该导致您的任何问题。