Chrome 115 では、サードパーティ コンテキストでのパーティショニングにより、ストレージ、Service Worker、通信 API が変更されました。サードパーティのコンテキストで使用される該当の API は、同一オリジン ポリシーによって分離されるだけでなく、トップレベル コンテキストのサイトによっても分離されます。
サードパーティのストレージ パーティショニングのサポートを実装する時間がないサイトは、デプリケーション トライアルに参加して一時的にパーティショニングを解除し(同一オリジン ポリシーによる分離を継続するが、トップレベル サイトによる分離は削除する)、サイトに埋め込まれたコンテンツのストレージ API、Service Worker API、通信 API の以前の動作を復元できます。このデプリケーション トライアルは、2024 年 9 月 3 日の Chrome 127 のリリースをもって終了するように設定されています。なお、これはサードパーティ Cookie へのアクセスのデプリケーション トライアルとは別個であり、ストレージへのアクセスのみを目的としています。
サードパーティの Cookie 以外のストレージ パーティショニングによって中断される特定のユースケースに対処するための長期的なソリューションとして、Chrome では、サードパーティが Storage Access API を使用してストレージ/通信アクセス(Cookie と Cookie 以外の両方)をリクエストできる機能を提案しています(Chrome 117 よりリリース)。これにより、サードパーティによる 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}
を渡し、IndexedDB とウェブロックへのアクセス権を取得するには {indexedDB: true, locks:true}
を渡します。
この追加の拡張を呼び出す以外に、Cookie 以外のストレージへのアクセスは、Storage Access API を介した Cookie アクセスの現在の要件と一致します。たとえば Chrome では、オリジンが同じ関連ウェブサイト セット(ファーストパーティ セットの新しい名称である RWS)に含まれている場合、メッセージは表示されません。同じ RWS に属していないオリジンには、Chrome の Storage Access API のプロンプト要件が適用されます。
所要時間
オリジン トライアルは、Chrome 120 から Chrome 125 まで(または 2024 年 8 月 6 日以降にすべてのマイルストーンで)利用できます。
範囲
Chrome 120 で利用できるのは、DOM ストレージ(セッション ストレージとローカル ストレージ)、インデックス登録済み DB、ウェブロックのみです。
キャッシュ ストレージ、送信元のプライベート ファイル システム、割り当て、Blob Storage、ブロードキャスト チャンネルは Chrome 121 で追加されました。
Chrome 123 では、共有ワーカーと Cookie を含める管理機能が追加されました。
専用ワーカーは、ワーカーが作成される前に 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 のドキュメントをご覧ください。- Storage Access API ハンドルが使用可能な場合は、それを使用するように iframe に関連するストレージを移行します。たとえば、
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 以降が必要です。