【问题标题】:Can I allow 1st-party cookies using CORS in iframe in Google Chrome?我可以在 Google Chrome 的 iframe 中允许使用 CORS 的第一方 cookie 吗?
【发布时间】:2020-06-17 22:06:57
【问题描述】:

为什么在 Chrome 中启用“阻止第三方 cookie”后,我的带有跨域请求和 withCredentials=true 的 cookie 不再发送?

环境:Chrome 80.0.3987.122nodejs server、2 个域(a.comb.com

测试用例:

  1. 使用新规则 test=cookie; SameSite=None; Secure 为域 a.com 设置 cookie
  2. <iframe src="https://b.com" />并把它放到a.com/index.html
  3. var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://a.com/', true); xhr.withCredentials = true; xhr.send(null);并把它放到b.com/index.html
  4. 将 CORS 添加到 a.com,例如:access-control-allow-origin: https://b.comaccess-control-allow-credentials: true
  5. 在 Chrome 中打开 https://a.com

结果:发送到 a.com 的 xhr 请求成功发送并获得 200,但是:启用“阻止第三方 cookie”时:cookie test=cookie请求中不存在 cookie。

为什么?这是一个第一方 cookie,因为域 a.com 是在 chrome 选项卡中打开的。

事实:

  1. 新的 google cookie 设计允许使用 SameSite=None; Secure (source) 制作 cookie
  2. CORS 允许在 access-control-allow-credentials: true (source) 时发送 site cookies
  3. XMLHttpRequest 允许使用withCredentials=true (source) 发送 cookie
  4. RequestCookie 用于 1rd-site(不是第三个),而该选项称为 block third-party cookie

铬问题:https://bugs.chromium.org/p/chromium/issues/detail?id=918322

【问题讨论】:

  • 您的问题中是否包含此第 3 方 cookie?
  • @DeepKakkar 这个 cookie test=cookie; SameSite=None; Secure 设置为 a.coma.com 是主站点,里面有 iframe。

标签: javascript node.js google-chrome cookies


【解决方案1】:

为什么?这是第一方 cookie,因为域 a.com 是在 chrome 选项卡中打开的。

这是一个第三方 cookie,因为请求是由 b.com 触发的,即使 b.com 是由 a.com 构成的。

我想您可以通过使用postMessagewindow.parent(即a.com)发送消息并通过发出 XHR 请求本身来响应那里的页面来解决此问题。

【讨论】:

  • 你错了。当我尝试从b.comb.com 保存和cookie 时,第三方cookie 将与localStorage 一样:Failed to read the 'localStorage' property from 'Window': Access is denied for this document. 因为b.com 现在无法在用户PC 中保存任何关于其自身的信息。但是test=cookie; 是有效的第一方 cookie(如果他是第三方则无法保存)。我知道postMessage,但这个主题是关于 CORS 机制的。 “阻止第三方cookies”的主要思想不同,不应该有这种行为。
  • @MixerOID — 您可能不同意 Chrome 将第三方 cookie 视为什么,但您却遇到了现实。我提供了postMessage 作为解决方法。
  • 好吧,你想说谷歌背离了 XMLHttpRequest 规范,没有说出来?规格:xhr.spec.whatwg.org/#the-withcredentials-attribute
  • @MixerOID — 如果第三方 cookie 用户偏好不拒绝第三方的 cookie,即使第一方想要它们,它也将毫无用处。
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 2010-12-02
  • 2015-12-19
  • 2020-05-22
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多