参与通过 Storage Access API 进行非 Cookie 存储访问的源试用

Helen Cho
Helen Cho
Ari Chivukula
Ari Chivukula

Chrome 115 通过第三方上下文中的分区,对存储空间、Service Worker 和通信 API 做出了更改。除了被同源政策隔离之外,在第三方上下文中使用的受影响 API 也会被顶级上下文的网站隔离出来。

尚未来得及支持第三方存储分区的网站可以参与弃用试用,以暂时取消分区(继续按同源政策进行隔离,但取消顶级网站的隔离),并恢复其网站上嵌入的内容中的存储、Service Worker 和通信 API 之前的行为。在 2024 年 9 月 3 日发布 Chrome 127 后,此弃用试用将结束。请注意,这与针对第三方 Cookie 访问的弃用试用是分开的,只针对存储空间的访问。

作为一项长期解决方案,旨在应对因第三方非 Cookie 存储分区中断而中断的特定用例。Chrome 建议第三方通过 Storage Access API(自 Chrome 117 起开始提供发货功能)请求存储/通信访问权限(包括 Cookie 和非 Cookie 访问权限),该 API 已允许第三方请求 Cookie 访问权限。

从 Chrome 120 开始,此提案将可供通过源试用进行实验。开发者应参与此源试用,以评估所提议的解决方案如何应对其用例,以确保在弃用试用结束之前做好准备。

源试用详情

从 Chrome 120 开始,Chrome 将支持源试用 StorageAccessAPIBeyondCookies,以支持针对 Storage Access API 提议的扩展程序(向后兼容),以允许在第三方环境中访问未分区存储空间(Cookie 和非 Cookie)。

力学

该 API 可按如下方式使用(在嵌入式 iframe 中运行的 JavaScript):

// Request a new storage handle via rSA (this should prompt the user)
const handle = await document.requestStorageAccess({all: true});
// Write some 1P context sessionStorage
handle.sessionStorage.setItem('userid', '1234');
// Write some 1P context localStorage
handle.localStorage.setItem('preference', 'A');
// Open or create an indexedDB that is shared with the 1P context
const messageDB = handle.indexedDB.open('messages');
// Use locks shared with the 1P context
await handle.locks.request('example', ...);

如果您只需要特定的 API 访问权限,而不是对 all 的访问权限,则可以只传递所需的 API 句柄的名称。例如,您可以传递 {sessionStorage: true} 以仅获取对会话存储空间的访问权限,或者传递 {indexedDB: true, locks:true} 以访问 IndexedDB 和 Web Lock。

除了调用以下额外的扩展之外,对非 Cookie 存储的访问也符合通过 Storage Access API 访问 Cookie 的当前要求。例如,在 Chrome 中,当源位于同一个 Related Website Set(First Party Set 的新名称:RWS)中时,系统就不会显示任何提示。不属于同一 RWS 的来源将需要遵守 Chrome 中 Storage Access API 的提示要求

时长

源试用从 Chrome 120 开始,一直持续到 Chrome 125(或任何里程碑阶段的 2024 年 8 月 6 日之后)。

范围

Chrome 120 仅支持 DOM Storage(会话和本地存储)、Indexed DB 和 Web Locks。

Chrome 121 中添加了缓存存储、源私有文件系统、配额、Blob 存储和广播通道。

Chrome 123 中添加了共享工作器以及对添加 Cookie 的控制。

从 Chrome 120 开始,如果在创建工作器之前调用 requestStorageAccess,则专用工作器会继承对未分区 Cookie 的访问权限(这不需要使用 Storage Access API 句柄)。

参与

  1. 评估您在第三方环境中如何使用 Cookie 和非 Cookie 存储。这些示例用例可能有助于您了解此提案是否满足您的需求。
  2. 启动 Chrome 120 版(或更高版本),并确保已启用 test-third-party-cookie-phaseout 标志。
  3. 如果您想在本地测试该功能而不先设置源试用令牌,可以在浏览器中启用 #enable-experimental-web-platform-features
    1. 完成本地测试后,您可以注册 StorageAccessAPIBeyondCookies 源试用,并为您的网域获取令牌。如需了解详细说明,请访问开始试用Chrome 源试用问题排查指南提供了完整的核对清单,以确保正确配置令牌。
    2. 通过 HTTP 标头HTML 元标记以编程方式将源试用令牌嵌入到您需要使用 Storage Access API 句柄的 iframe 中。请注意,令牌必须嵌入到任何希望使用此 API 的帧中,如果将其嵌入到父帧中,并不会在子帧中启用此 API。
  4. 调用 document.requestStorageAccess(...) 以获取跨网站 iframe 中的 Storage Access API 句柄。如需了解成功完成此调用的要求,请参阅 Storage Access API 文档
  5. 迁移 iframe 中相关的存储空间,以便使用 Storage Access API 句柄(如果有)。例如,对 window.sessionStorage.setItem(...) 的调用会变为 handle.sessionStorage.setItem(...)
  6. 打开您的网站,验证存储空间访问标识名是否按预期运行。
  7. 如需停止参与源试用,请移除您在第 3 步中添加的令牌。
  8. 欢迎向 Storage Access API 非 Cookie Storage GitHub 代码库提交反馈或提出您遇到的任何问题。

演示:使用 Storage Access API 访问未分区的本地存储空间

以下演示介绍了如何使用 Storage Access API 从第三方 iframe 访问未分区的广播频道:

https://saa-beyond-cookies.glitch.me/

此演示版要求使用 Chrome 121 或更高版本,并启用 test-third-party-cookie-phaseout 标志。

其他资源