透過 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 和網頁鎖定功能的存取權。

除了呼叫這個額外擴充功能之外,對非 Cookie 儲存空間的存取權,也必須符合透過 Storage Access API 存取 Cookie 的現行規定。舉例來說,如果來源位於相同的相關網站組合 (RWS,第一方組合的新名稱),Chrome 就不會顯示提示。不屬於相同 RWS 的來源必須遵守 Chrome 中 Storage Access API 的提示規定

時間長度

來源試用功能將從 Chrome 120 到 Chrome 125 提供 (或在任何里程碑中於 2024 年 8 月 6 日後提供)。

範圍

Chrome 120 僅支援 DOM 儲存空間 (工作階段和本機儲存空間)、索引 DB 和網頁鎖定。

Chrome 121 新增了快取儲存空間、原始私人檔案系統、配額、Blob 儲存空間和廣播管道。

Chrome 123 新增了共用 Worker,並可控管Cookie 的加入

如果在 Chrome 120 之後,在建立 worker 之前呼叫 requestStorageAccess專用 worker 就會繼承未分割 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 Non-Cookie Storage GitHub 存放區

範例:使用 Storage Access API 存取未分割的本機儲存空間

以下示範如何使用 Storage Access API 從第三方 iframe 存取未分割的廣播管道:

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

這個示範需要 Chrome 121 以上版本,並啟用 test-third-party-cookie-phaseout 標記。

其他資源