我有一个 iframe,我在其中使用 cookie 身份验证。当用户登录时,cookie 在我的域上正常设置。我使用 SameSite=None;Secure。问题是当第三方网站从我的域中嵌入 iframe 时,我的身份验证 cookie 未通过,因此 iframe 无法验证用户身份。
这在 Chrome 和 Firefox 中运行良好,但在 Safari 中不起作用(并且它曾经工作到大约一个月前)
我知道 SameSite=None 的Webkit 错误,据说在 Safari 13 中已修复。我知道 Safari 不再允许 iframe 设置第三方 cookie(多年来一直如此,所以我看不到它如何与最近的变化有关)。但是,我不是要设置 cookie - 我只是想阅读它。直到最近,这是可能的(参见这个 SO question)。
在 Safari 13 之前,有一种解决方法允许人们通过将首页重定向到 cookie 设置域然后返回原始页面来设置第三方 cookie。在这种情况下,iframe 将能够看到 cookie(因为同样,iframe 无法写入但它可以读取 cookie。
我尝试设置一个没有 SameSite 属性的辅助 cookie,因为这些应该可以工作,但它仍然没有被发送。
无论是否设置了 SameSite,Safari 现在是否会完全删除 cookie?如果是这样,他们为什么要费心修复 SameSite 错误?有些东西没有加起来。
更新:这似乎与 Apple 的 ITP 2 有关,它对第三方 cookie 设置了严格的标准,甚至根据他们认为可能进行不良跟踪的域来区分域:https ://www.seerinteractive.com/blog/什么是智能跟踪预防/
因此,从我收集到的信息来看,这些似乎无法规避这种情况。
更新 2:我想我可能在 Webkit 的存储访问 API 中找到了可靠的解决方案:https ://webkit.org/blog/8124/introducing-storage-access-api/