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

Helen Cho
Helen Cho
Ari Chivukula
Ari Chivukula

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

サードパーティのストレージ パーティショニングのサポートを実装する時間がないサイトは、非推奨トライアルに参加し、サイトに埋め込まれたコンテンツ内のストレージ API、Service Worker、通信 API の以前の動作を一時的にパーティショニング解除(同一オリジン ポリシーによる分離を継続し、トップレベル サイトによる分離を削除)することができます。この非推奨トライアルは、Chrome 127 のリリース(2024 年 9 月 3 日)をもって期限切れになります。なお、これはサードパーティ Cookie へのアクセスに関する非推奨トライアルとは別のものであり、ストレージへのアクセスのみを目的としています。

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

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

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

Chrome 120 以降、Chrome ではオリジン トライアル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 ストレージ(セッションとローカル ストレージ)、Indexed 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 Non-Cookie Storage GitHub リポジトリまでお知らせください。

デモ: Storage Access API を使用してパーティション分割されていないローカル ストレージにアクセスする

次のデモは、Storage Access API を使用して、サードパーティの iframe からパーティション分割されていないブロードキャスト チャンネルにアクセスする方法を示しています。

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

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

参考情報