問題
更新しました(2021年5月31日):この動作は、Chrome 84以降、 デフォルトで有効になっています。。
更新しました(2020年4月3日)。クロームがSameSite Cookieの変更を一時的にロールバックしています。
更新しました(2020年6月12日):SAML 2.0コネクタの修正版に関する情報を追加しました。
https://www.chromium.org/updates/same-site によると、現在の展開計画は以下の通りです:
2020年2月4日: Chrome 80 Stableをリリースしました。 SameSite-by-defaultおよびSameSite=None-requires-Secureの有効化は、この最初のChrome 80安定版ロールアウトに含まれません。 Chrome 80安定版でSameSiteのエンフォースメントが有効になる時期について、より詳細な情報は次の項目をご覧ください。
2020年2月: Chrome 80 Stableのエンフォースメントロールアウト:SameSite-by-defaultおよびSameSite=None-requires-Secureの動作は、月曜日の米国大統領の日の祝日を除く2020年2月17日の週から、初期限定集団に対してChrome 80 Stableへのロールアウトを開始する予定です。 この最初の限定的な段階から、徐々にロールアウトを増やしていくことで、生態系への影響を注意深く監視し、評価していきます。
エンドユーザーは、 chrome://flags/#same-site-by-default-cookies
および chrome://flags/#cookies-without-same-site-must-be-secure
(Chrome 76時点で利用可能)によりこれらの設定を無効化できます。
SameSiteのクッキー設定とデフォルト動作の変更についての詳細は、以下の「追加情報」をご参照ください。
LiferayのSAML統合への影響について
注:サービスプロバイダ(SP)として構成され、非Liferay Identity Provider(IdP)に接続するLiferayインスタンスは、影響を受けるかどうかを明確にするために、プロバイダに相談してください。
ブラウザセッションごとに、最初のSPが開始したSSOリクエストは機能し続けますが、ユーザーはLiferay SAML IdPにログインする必要があります - IdPですでに認証されたセッションを持っていても、です。 この動作は、SAMLプラグインで「Force Re-Authentication」を構成した場合と同じです。 2回目のSPによるSSOリクエストは、成功させるために事前にブラウザを再起動する必要があります。
SAML Single LogoutがLiferay SAML IdPで正しく動作しない。 IdP上では、サインインしている旨のプロンプトが表示され、フローが終了します。 この時点から、SP上の関連するCookieをすべて削除せずにSPからログアウトすることが困難になります。
SPでSSOリクエストを行った際のページへのリダイレクトバックは正しく動作します。 これは、リダイレクトURLが "state "URLパラメータを通じて伝播され、Liferay SPのゲストセッションに保持されないためです。
影響を受ける環境
お客様の環境が以下の条件をすべて満たしている場合、影響を受ける可能性があります:
- Liferay Portal 6.x EE と Liferay DXP 7.x のデプロイメントを SAML IdP として構成し、 Liferay Connector to SAML 2.0, バージョン
- 5.0.0 DXP 7.2用
- 4.1.0 以下、DXP 7.1用
- 3.1.1 以下 DXP 7.0用
- Liferay Portal 6.2 EEでは2.1.3以下となります。
- Liferay Portal 6.1 EE GA2、GA3の1.0.4以下。
- サービスプロバイダとしてLiferay SAML IdPに接続するWebサイト
- サービスプロバイダとアイデンティティプロバイダは、例えば異なるドメインで稼働している:
- https://www.mydomain.com -> https://www.idp.otherdomain.com : 影響を受ける (クロスサイト)
- https://www.mydomain.com -> https://idp.mydomain.com : 影響なし (同上)
- Google Chrome 80以上をご利用のエンドユーザー様
解像度
長期的な解決策
Liferay は、 LPS-108070に、SameSite クッキーの属性を制御するロジックを実装しました。
修正版
- DXP 7.0 用 Liferay Connector to SAML 2.0: 3.1.2+
- Liferay Connector to SAML 2.0 for DXP 7.1: 4.1.1+
- Liferay Connector to SAML 2.0 for DXP 7.2: 5.0.1+
(2020年6月12日更新)。
詳細情報
ファーストパーティ/同サイトのクッキー処理仕様の前のバージョンでは、クッキーがサードパーティのコンテキストをサポートすべきことを明示的に宣言する手段が定義されていませんでした。 この結果、これらのブラウザは、 SameSite=None
とクッキーを完全に拒否するか、SameSite=Strict
と解釈していました。 歴史的なCookieの動作とは本質的に逆です! 例えば、このSafariのバグをご覧ください https://bugs.webkit.org/show_bug.cgi?id=198181
なお、SafariやiOSデバイスのブラウザの場合、 SameSite=None
を正しく処理するためには、OS(OSX / iOS)のアップグレードが必要です。 もちろん、単にブラウザをアップグレードするよりも多くの投資が必要であり、互換性のないバージョンが使われ続ける可能性が高くなります。
良いニュースは、これらの同じブラウザ/バージョンは、古いクッキーの動作をサポートし続けているということです。 ですからこれは、 SameSite=None
との非互換性を、SameSite 属性のない 2 番目のクッキーを設定し、主クッキーがブラウザから送信されないときにこのクッキーを読むことにフォールバックすることによって修正する機会を提供します。
代替案
Set-Cookie レスポンスヘッダーを書き換えて、 SameSite=None; Secure
を、例えば Apache2 Headers mod を使うように、Web Server レベルで追加することが可能です:
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=None
注:これはあくまで一例です。