【问题标题】:Safari 13+ blocks third-party cookies if API is on different subdomain如果 API 位于不同的子域,Safari 13+ 会阻止第三方 cookie
【发布时间】:2021-06-26 04:12:38
【问题描述】:

我有 Web 应用程序和 API 应用程序。

这些应用程序托管在不同的域中。

例如。

WebApp:app.product.com

API:api.product.com

在 Set-Cookie 标头中设置 Cookie 以响应 API 调用:

api.product.com/SetCookie -> 响应头 Set-Cookie: cookie_name=cookie_value;路径=/;安全的;仅http; SameSite=无

我再次向 API 发出请求,我需要将此 cookie 附加到请求标头。

在大多数流行的浏览器上一切正常,但在 Safari(13.1+ 版)上没有设置这个 cookie(甚至在开发工具中也不可见)。

Cookie 在响应中可见 response with cookie

但它没有存储在浏览器 cookie 中 enter image description here

我试图将 cookie 的域属性设置为“product.com”,但没有解决问题。

在这种情况下有没有办法设置跨域cookie?也许通过更改设置的 cookie 属性。

或者托管来自同一域的所有应用程序将解决问题?

【问题讨论】:

    标签: cookies safari cross-domain samesite


    【解决方案1】:

    您是否按下了“存储”选项卡右上角的重新加载按钮?我使用 Safari 14.1.1 并构建了一个类似的环境来进行相同的测试。但得到了不同的结果,即使 Safari 从未以第一方身份访问过 api.example.net。我仍然可以在上面写 cookie。我做什么:

    1. 访问 app.example.net。
    2. 打开 devtool 并转到 Network 面板
    3. 执行fetch('https://api.example.net/x.php', {method: 'POST', credentials: 'include'});
    4. x.php 将在 Header Set-Cookie: test=test; expires=Mon, 06-Sep-2021 09:42:18 GMT; Max-Age=5184000; secure; HttpOnly; SameSite=None 中返回 set-cookie
    5. 再次执行,我可以看到这个cookie是和第二个请求一起发送的。
    6. 我还在另一个页面上使用 iframe 来嵌入 api.example.net。所以它不会是第一方。我可以看到那个域的存储数据。就像@smyq 提供的截图一样。并在按下重新加载按钮后。 cookie 出现在开发工具中。

    但我没想到会出现这种行为。我认为它违反了Safari's default cookie policy。 Safari 现在正在阻止所有 3rd 方 cookie。

    PS。如果我在一个非常不同的域名上执行此操作,而不仅仅是一个不同的子域。 cookie 将被 ITP 的跟踪预防阻止。我启用了 ITP 调试模式来获取信息。

    【讨论】:

      【解决方案2】:

      如果可能,来自同一域的托管将解决此问题,因为 iframe cookie 将不再是“第三方”,因此限制将被取消。

      在 Safari 中,第三方框架必须先请求访问 Storage API,然后才能访问 cookie。

      所有浏览器都有很多变化regarding cookies and iframe.

      变化的基础是现在有一个“SameSite”cookie 政策,Only cookies set as SameSite=None; Secure will be available in third-party contexts, provided they are being accessed from secure connections.

      Firefox 使用分区存储方法,因此框架将正常运行,除非您随后将应用程序作为新窗口打开,然后 cookie 存储可能会或可能不会跟随,具体取决于新窗口的创建方式。

      Cookie Status 是跟踪第三方 cookie 在不同浏览器中的工作方式以及您应该进行哪些更改以使其正常工作的绝佳资源。

      【讨论】:

      • 好建议,但 OP 没有说任何关于 iframe 的内容。相反,他们提到了联系 API。换句话说,他们正在执行 XHR。
      • P.S.感谢您提供指向 Cookie 状态的出色链接!
      【解决方案3】:

      从 13.1 版开始,Safari 将完全阻止第三方 cookie https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more/

      【讨论】:

        猜你喜欢
        • 2020-04-30
        • 2019-06-22
        • 2020-06-05
        • 2018-10-06
        • 2018-04-01
        • 1970-01-01
        • 2021-07-27
        • 2010-10-16
        • 2015-03-30
        相关资源
        最近更新 更多