透過 Storage Access API 參與非 Cookie 儲存空間存取的來源試用

Helen Cho
Helen Cho
Ari Chivukula
Ari Chivukula

Chrome 115 透過在第三方環境中進行分區,為儲存空間、Service Worker 和通訊 API 導入了異動。除了透過相同來源政策隔離之外,在第三方內容中使用的受影響的 API 也會由頂層內容的網站隔離。

如果網站沒有時間導入第三方儲存空間分區支援,可以參加淘汰試用計畫,暫時取消分區 (按照相同來源政策繼續隔離,但不再依據頂層網站區隔開來),並在網站內嵌的內容中恢復先前使用的儲存空間、服務工作人員和通訊 API 的行為。此淘汰試用方案將於 2024 年 9 月 3 日推出的 Chrome 127 版本到期。請注意,這與在淘汰第三方 Cookie 的試用期間無關,這只是為了取得儲存空間的存取權。

為因應第三方非 Cookie 儲存分區中斷的特定用途的長期解決方案,Chrome 建議第三方可透過 Storage Access API (自 Chrome 117 起,支援 shipping) 來要求儲存/通訊存取權 (無論 Cookie 與非 Cookie),這類 API 已允許第三方要求存取 Cookie。

自 Chrome 120 起,這項提案將透過來源試用進行實驗,開發人員應參與這項來源試用計畫,以評估提出的解決方案如何解決自身用途,確保在淘汰試用期結束前做好萬全準備。

來源試用詳細資料

從 Chrome 120 版開始,Chrome 將支援來源試用StorageAccessAPIBeyondCookies,以便啟用建議的 Storage Access API 擴充功能 (以 Cookie 和非 Cookie 相容),在第三方環境中存取未分區的儲存空間 (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} 來存取索引資料庫和網路鎖定。

除了呼叫這個額外的擴充功能外,存取非 Cookie 儲存空間外,也符合現行透過 Storage Access API 存取 Cookie 的規定。舉例來說,在 Chrome 中,如果來源屬於相同的相關網站集 (RWS,即第一方集合的新名稱),系統就不會顯示提示。如果來源不屬於同一個 RWS,則需要在 Chrome 中顯示 Storage Access API 提示要求

時間長度

在 Chrome 120 之前 (或在任何里程碑 2024 年 8 月 6 日後),使用者可以從 Chrome 120 取得來源試用。

範圍

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 中繼標記程式輔助,將來源試用權杖嵌入至 iframe,並使用 Storage Access API 控制代碼。請注意,想要使用這個 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 旗標。

其他資源