Storage Access API を介した Cookie 以外のストレージ アクセスのオリジン トライアルに参加する

Helen Cho
Helen Cho
Ari Chivukula
Ari Chivukula

Chrome 115 では、サードパーティ コンテキストでのパーティショニングにより、ストレージ、Service Worker、通信 API が変更されました。サードパーティのコンテキストで使用される該当の API は、同一オリジン ポリシーによって分離されるだけでなく、トップレベル コンテキストのサイトによっても分離されます。

サードパーティのストレージ パーティショニングのサポートを実装する時間がないサイトは、サポート終了予定のトライアルに参加して、一時的にパーティショニングを解除(同一オリジン ポリシーによる分離を継続するが、最上位サイトによる分離は削除)し、サイトに埋め込まれたコンテンツのストレージ API、サービス ワーカー API、通信 API の以前の挙動を復元できます。この非推奨トライアルは、2024 年 9 月 3 日の Chrome 127 のリリースとともに終了する予定です。これは、サードパーティ Cookie へのアクセスに関するデプリケーション トライアルとは別であり、ストレージへのアクセスのみを対象としています。

サードパーティの Cookie 以外のストレージ パーティション分割によって中断される特定のユースケースに対処するための長期的なソリューションとして、Chrome ではサードパーティが Storage Access API(Chrome 117 時点でリリース)を介してストレージ / 通信へのアクセス(Cookie と Cookie 以外の両方)をリクエストできるようにすることを提案しています。この API では、サードパーティが Cookie へのアクセスをリクエストすることもすでに可能です。

Chrome 120 以降、このプロポーザルはオリジン トライアルでテストできるようになります。デベロッパーは、このオリジン トライアルに参加して、提案されたソリューションがユースケースにどのように対応しているかを評価し、非推奨トライアルの終了前に準備を整える必要があります。

オリジン トライアルの詳細

Chrome 120 以降では、オリジン トライアルである 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', ...);

all へのアクセスではなく、特定の API アクセスのみが必要な場合は、必要な API ハンドルのみの名前を渡します。たとえば、{sessionStorage: true} を渡して Session Storage へのアクセス権のみを取得したり、{indexedDB: true, locks:true} を渡して IndexedDB と Web Locks へのアクセス権を取得したりできます。

この追加の拡張を呼び出す以外に、Cookie 以外のストレージへのアクセスは、Storage Access API を介した Cookie アクセスの現在の要件と一致します。たとえば、Chrome では、オリジンが同じ関連ウェブサイト セット(RWS、ファーストパーティ セットの新しい名前)に含まれている場合、プロンプトは表示されません。同じ RWS に属していないオリジンには、Chrome の Storage Access API のプロンプト要件が適用されます。

所要時間

オリジン トライアルは、Chrome 120 から Chrome 125 まで(または 2024 年 8 月 6 日以降に利用可能)。

範囲

Chrome 120 で利用できるのは、DOM ストレージ(セッション ストレージとローカル ストレージ)、インデックス登録済み DB、ウェブロックのみです。

Chrome 121 で、キャッシュ ストレージ、オリジンのプライベート ファイル システム、割り当て、Blob Storage、ブロードキャスト チャネルが追加されました。

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. ローカルでのテストが完了したら、StorageAccessAPIBeyondCookies オリジン トライアルにregisterし、ドメインのトークンを取得します。詳細な手順については、オリジン トライアルの開始をご覧ください。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/

このデモを行うには、test-third-party-cookie-phaseout フラグを有効にした Chrome 121 以降が必要です。

参考情報