Chrome 115 では、サードパーティのコンテキストでパーティショニングすることで、ストレージ API、サービス ワーカー API、通信 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 ~ 125 で利用できます(または 2024 年 8 月 6 日以降のすべてのマイルストーンで利用できます)。
範囲
Chrome 120 では、DOM ストレージ(セッション ストレージとローカル ストレージ)、インデックス付き DB、ウェブロックのみを使用できます。
Chrome 121 で、キャッシュ ストレージ、オリジンのプライベート ファイル システム、割り当て、Blob Storage、ブロードキャスト チャネルが追加されました。
Chrome 123 では、共有ワーカーとCookie の組み込みの制御が追加されました。
専用ワーカーは、Chrome 120 以降でワーカーの作成前に requestStorageAccess
が呼び出された場合に、パーティショニングされていない Cookie へのアクセス権を継承します(Storage Access API ハンドルの使用は必要ありません)。
参加する
- サードパーティのコンテキストで Cookie と Cookie 以外のストレージを使用する方法を評価します。ユースケースの例は、この提案がお客様のニーズに合っているかどうかを判断するのに役立ちます。
- Chrome バージョン 120(以降)を起動し、test-third-party-cookie-phaseout フラグが有効になっていることを確認します。
- オリジン トライアル トークンを事前に設定せずにローカルで機能をテストする場合は、ブラウザで #enable-experimental-web-platform-features を有効にします。
- ローカルでのテストが完了したら、StorageAccessAPIBeyondCookies オリジン トライアルに登録して、ドメインのトークンを取得できます。詳細な手順については、オリジン トライアルの開始をご覧ください。Chrome のオリジン トライアルのトラブルシューティングのガイドでは、トークンが正しく設定されていることを確認するためのチェックリストがすべて記載されています。
- HTTP ヘッダー、HTML メタタグ、またはプログラムで、Storage Access API ハンドルを使用する必要がある iframe に、そのオリジン トライアル トークンを埋め込みます。この API を使用するフレームによってトークンが埋め込まれる必要があります。親フレームに埋め込んでも、子フレームで API は有効になりません。
document.requestStorageAccess(...)
を呼び出して、クロスサイト iframe 内の Storage Access API ハンドルを取得します。この呼び出しを成功させるための要件については、Storage Access API のドキュメントをご覧ください。- iframe 内のストレージ関連のものを移行して、Storage Access API ハンドルを使用できるようにします(利用可能な場合)。たとえば、
window.sessionStorage.setItem(...)
の呼び出しはhandle.sessionStorage.setItem(...)
になります。 - ウェブサイトを開き、ストレージ アクセス ハンドルが想定どおりに動作していることを確認します。
- オリジン トライアルへの参加を停止するには、手順 3 で追加したトークンを削除します。
- フィードバックを送信するか、問題が発生した場合は 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 以降が必要です。