ご覧いただきありがとうございます。 涼しくなってきましたが、皆様いかがお過ごしでしょうか?
広告が関係ないシステムはサードパーティクッキーへの影響はないと思っていたので寝耳に水だったのですが、 社内システムにて、サードパーティクッキー規制影響するケースが判明しました。
システムへの影響が大きいことが分かったので、現象および影響についてまとめます。
みなさまの対応状況や誤った記述の指摘など、コメントやSNSコメントなどで教えていただけますと大変参考になります。
サードパーティークッキー概説や規制の経緯はインターネット上に詳しく書かれたものがあるのでそちらを参照してください。
本格化するサードパーティ・クッキー規制
Firefoxではサードパーティクッキー規制がデフォルトでロールアウトされています。 Safariは以前よりサードパーティクッキーを規制していました。Chrome, Edgeでも規制がアナウンスされています。
Chrome, Edge, Firefox, Safariの規制状況をまとめると次のようになります。
- Chrome: 2024 Q1から規制開始をアナウンス サードパーティ Cookie の段階的廃止への準備
- Edge: Chromeに同じ?
- Firefox: 規制済み Firefox rolls out Total Cookie Protection by default to more users worldwide
- Safari: 規制済み
どういう現象が報告されたの?
今回、社内で報告された内容は次のようなものです。ブラウザはFirefoxでした。
サードパーティクッキー規制前は、SAMLでのIdP→Aの間でSSOを行うと、iframeで埋め込まれたBのサイトへもSSOが自動的に行われていました。
サードパーティクッキー規制後は、Bのサイトへの自動的SSOが失敗し、X-Frame-Options: deny
エラーが出てしまいます。
Bではiframeで埋め込まれることを想定してX-Frame-Optionsは出力していません。
何が起こったのでしょうか?
これを説明するためにCookies Having Independent Partitioned State (CHIPS) を紹介します。
CHIPSとは何か?
CHIPSは、サードパーティクッキー規制の仕様です。
CHIPS以前は、クッキーはDomain, HttpOnly, Secureなどの属性に従って読み書きの許可が行われます。 この仕様はiframeで埋め込まれていても同様に読み書きの許可が得られれば同じように扱われていました。
CHIPS以後は埋め込み元の情報も読み書きの許可の判断に利用されます。 ブラウザでiframeを利用せずに表示したときに設定されたクッキーとiframeで埋め込まれたサイトから設定されたクッキーは別物として扱われます。 この埋め込み元の情報が異なるクッキーの値は読み取ることができません。文字通りCookies Having Independent Partitioned Stateというわけです。
報告された現象が起きるときクッキーは次のように扱われるようです:
- Aをブラウザで直接開いた時に設定されるクッキーは (
https
,A
) という埋め込み情報を持ちます。 - iframeを使ってAに埋め込まれたBに設定されるクッキーは(
https
,B
,A
) という情報を持ち区別されます。(https
,A
)のクッキーの読み書きを行えません。
報告された現象は次のように説明できます:
- AにログインするためにIdPとAのログインクッキーを生成
- Aのクッキー (
https
,A
), IdPのクッキーを (https
,IdP
) とします
- Aのクッキー (
- iframeで埋め込まれたBはログインセッションをもたないのでIdPにSAMLのリクエストを実行
- CHIPS以前はSAML処理の時にIdpリダイレクトで(
https
,IdP
)が読むことができた - CHIPS以後はiframeで埋め込まれるのでIdPのクッキー(
https
,Idp
)を読めない。(https
,Idp
,A
) として別のクッキーとして扱われる
- CHIPS以前はSAML処理の時にIdpリダイレクトで(
- Idpのログインクッキーは存在しないのでSAML処理を継続するために、ログイン画面にリダイレクトします。
- IdPのログイン画面は、
X-Frame-Options: deny
を出力しているのでX-Frameオプションエラーが発生する。
CHIPSが適用されると問題視されていたサードパーティクッキーによる個人情報のトラッキングも防ぐことができます。
サードパーティ・クッキー廃止は関係あるのかい?ないのかい?どっちなんだい?
結論:広告が関係ないシステムも影響するかも
クッキーを利用したシステム連携はSSOの常套手段なので、影響はあると考えるべきです。 例えば次のようなケースです:
- クロスドメインのサイトをiframeで埋め込みクッキーを利用してSSO
- Auth0のサイレント認証に似た認証の仕組みを導入しているシステム Configure Silent Authentication
連携していないように見えるサイレント連携を見落としてしまうと、サードパーティクッキーの規制が本格化したときに トラブルになりそうなので、Chrome, Edgeで機能フラグをON/OFFしてテストを行うことをお勧めします。
Chrome, Edgeで機能フラグで提供されている
Edge, ChromeはTest Third Party Cookie Phaseoutの機能フラグが提供されています。 こちらを利用して事前に技術検証を行うとよいでしょう。
URLバーに次を入力すると機能フラグのON・OFFを制御できます。
- (Edge用) edge://flags/#test-third-party-cookie-phaseout
- (Google Chrome用) chrome://flags/#test-third-party-cookie-phaseout
サードパーティクッキー規制で動かないことが判明した。どうすれば...?
個別にサードパーティクッキーを許可する例外を設定していただく他ありません。
デバイス管理ソリューションを採用している場合は設定テンプレートを利用するのが良さそうです。
- mozilla > policy-templates
- Windows デバイスで Microsoft Edge ポリシー設定を構成する
- The Chromium Projects > Policy Templates
クッキーのPartitioned 属性について
CHIPSの仕様ではPartitioned 属性も導入されています。これは将来的にiframeなどの埋め込みでクッキーを設定したければ Partitioned属性がオプトインしなければならないというものです。
Firefoxはiframeなどで埋め込まれたサイトから設定されたクッキーはPartitioned 属性付きとして処理されるとしています。 Introducing State Partitioning
将来的にPartitioned属性がついていないクッキーの場合、iframeからクッキーの設定は無視されるかもしれません。 実際に、Chrome, EdgeでPartitioned属性を機能フラグで有効化すると、iframeからPartitioned属性がないクッキーは無視されます。
こちらも同様に機能フラグでテストを行うことができます。
- (Edge用) edge://flags/#partitioned-cookies
- (Google Chrome用) chrome://flags/#partitioned-cookies
iframeで外部サイトから埋め込れるサービスは実装の修正が必要になる可能性は想定しておいた方がいいでしょう。
比較的新しい仕様として次のようなものがあります。
各Idpベンダーの対応状況やブラウザの対応状況によってできる対策に差が生まれそうです。 サードパーティクッキー規制のブラウザ側の対応を見守っていきましょう。
文責 @yokotaso