透過 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 起運送) 要求儲存/通訊服務 (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 Lock 的存取權。

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

時間長度

來源試用在 Chrome 120 版本為 Chrome 125 版本 (或 2024 年 8 月 6 日後)。

範圍

Chrome 120 僅支援 DOM 儲存空間 (工作階段和本機儲存空間)、索引資料庫和 Web Lock。

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. 將來源試用權杖嵌入 iframe 中,並利用 HTTP 標頭HTML 中繼標記程式輔助的方式,使用 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 標記。

其他資源