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

Helen Cho
Helen Cho
Ari Chivukula
Ari Chivukula

Chrome 115 通过在第三方上下文中进行分区,对存储、Service Worker 和通信 API 进行了变更。除了按同源政策进行隔离之外,在第三方上下文中使用的受影响的 API 还会通过顶级上下文的网站进行隔离。

如果网站没有时间支持第三方存储分区,可以参与弃用试用,以暂时取消分区(通过同源政策继续隔离,但顶级网站取消隔离),并在其网站嵌入的内容中恢复存储、Service Worker 和通信 API 的先前行为。Chrome 127 将于 2024 年 9 月 3 日发布,届时弃用试用期将会失效。请注意,此试用与弃用第三方 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 和网络锁定的访问权限。

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

时长

源试用将从 Chrome 120 持续到 Chrome 125(或 2024 年 8 月 6 日之后的任何里程碑版本)。

范围

Chrome 120 仅支持 DOM 存储(会话和本地存储)、索引型数据库和网络锁定功能。

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. 在本地完成测试后,您可以register参加 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 存储 GitHub 代码库中提交反馈或提出您遇到的任何问题。

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

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

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

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

其他资源