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

Helen Cho
Helen Cho
Ari Chivukula
Ari Chivukula

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

如果网站没有时间实现对第三方存储分区的支持,则可以参与弃用试用,以便暂时取消分区(继续采用“同源”政策进行隔离,但移除“顶级网站”隔离),并在其网站上嵌入的内容中恢复存储空间、服务工件和通信 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 的使用方式如下(JavaScript 在嵌入的 iframe 中运行):

// 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 锁的访问权限。

除了调用此额外扩展程序之外,访问非 Cookie 存储空间还需要满足通过 Storage Access API 访问 Cookie 的当前要求。例如,在 Chrome 中,如果来源位于同一相关网站集 (RWS,First-Party Set 的新名称) 中,则不会显示任何提示。不属于同一 RWS 的来源需要遵守 Chrome 中 Storage Access API 的提示要求

时长

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

范围

Chrome 120 中仅提供 DOM 存储(会话存储和本地存储)、Indexed DB 和 Web 锁。

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

Chrome 123 中添加了共享 Worker 以及对包含 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 存储 GitHub 代码库

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

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

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

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

其他资源