SAML(セキュリティアサーションマークアップ言語)アダプターは、展開でシングルサインオン(SSO)とシングルログオフ(SLO)を提供します。各Liferay DXPインスタンスは、Service Provider(SP)またはIdentity Provider(IdP)のいずれかとして機能します。Identity Providerは、ユーザーが他のWebサイトにアクセスするためのシングルサインオンを提供する、信頼できるプロバイダです。Service Providerは、アプリケーションをホストするウェブサイトで、適切な資格情報を持つ識別されたユーザーにのみアクセスを許可します。
**注:**単一のLiferay DXPインスタンスはSSOセットアップのSPまたはIdPの どちらか です;両方ということはありません。しかし、別々のインスタンスを両方の目的に合わせて使用することもできます。(たとえば、1つのインスタンスがSPで、もう1つのインスタンスがIdP)
以下はSAMLのしくみの背景です。設定をすぐに始めたい場合は、Setting Up SAML as an Identity Provider、またはSetting Up SAML as a Service Providerの記事を参照し、SAML adapterの使い方について読んでください これらの手順は、マーケットプレイスで入手可能な4.1.0バージョン用なのでご注意ください。
Liferay Connector to SAML 2.0の新機能
Liferay DXPの4.1.0のアプリケーションのバージョンは、待望の改善をもたらします。
- サービスプロバイダー(SP)として機能するLiferay DXPは、複数のIDプロバイダー(IdP)に接続できるようになりました。
- 開発者には、ユーザーのサインインに使用できるアイデンティティプロバイダーをカスタマイズするための拡張ポイントがあります。
- 他の署名アルゴリズムのサポート(
SHA-256など
) - 署名メソッドアルゴリズムのURLの今(
SHA-1
無効:http://www.w3.org/2000/09/xmldsig#rsa-sha1
、メタデータからブラックリストにすることができます。)
注:バージョン3.1.0より前のLiferay SAMLアダプターから移行する場合、ポータルプロパティは自動的にシステム設定構成に移行されます。設定の詳細についてはConfiguring SAMLの記事を参照してください。
重要なSAMLパス
参考までに、以下はいくつかの重要なSAML パスです。
このURLは、メタデータXMLファイルのデフォルトのロケーションです:
[host]:[port]/c/portal/saml/metadata
SAMLを設定するときは、SAML証明書のインポートは不要です。 Liferay DXPはSAMLメタデータXMLファイルから証明書を読み取ります。SalesforceなどのサードパーティーアプリケーションにLiferay SAML証明書を読み取らせる場合は、キーストアからLiferay DXP証明書をエクスポートできます。デフォルのキーストアファイルは
[Liferay Home]/data/keystore.jks
このパスは、システム設定→SSO→SAML設定→キーストアパスで変更できます。
シングルサインオン
IdPとSP、両方ともSingle Sign Onプロセスを開始でき、SSOフローはそれぞれによって異なります。開始方法に関係なく、SSOはSPとIdPの間のHTTPS用に設定されているため、すべてのトランスポートレベルの通信は暗号化されています。SAMLのリクエストは、SAML 2.0 specificationで定義されているSAML WebブラウザSSOプロファイル上で、Liferay DXPで設定された証明書を使用して署名されます。
すべての場合において、応答はHTTP-POSTまたはHTTP-Redirectを使用して送信されます。HTTP-POSTが推奨されているのは、URLがブラウザで処理するには長すぎるというリスクを軽減するためです。
IdPが最初にSSOを開始したとします。
IDプロバイダーが開始したSSO
ユーザーがブラウザからIdPに直接リクエストを送信してSSOサイクルに入ることがあります。
IdPへのSSOリクエスト
Liferay DXPがIdPの場合、IdPがSSO URLを開始しました
-
パスを
/c/portal/saml/sso
として指定する必要があります。 -
以前に設定されたService Provider Connection(SPC)への識別子である
entityId
パラメータを含める必要があります。 -
認証が成功したときにユーザーがリダイレクトされるURLエンコード値を含む
RelayState
パラメーターを含めることができます。このURLは、希望するSPC上のロケーションを示すはずです。( SAML 2.0 standards section 3.4.3によると、この値は長さ80バイトを超えてはいけません。)SSOの実行後、ランディングページを指定しておくと便利です。
(Siteminder、ADFSなど)Liferay DXP IdP以外については、IdPで開始されたSSO URLの構築に関するベンダのドキュメントを参照してください。
IdPがユーザーが認証されていないと判断した場合、IdPはユーザーに適切なログイン画面を表示します。
IdPからのSSOレスポンス
認証が成功すると、IdPはSAMLレスポンスを構築します。指定されたService Provider Connection(SPC)で設定された属性ステートメントも含まれています。(Liferay DXPのSAML adapter上での設定方法についてはこちらを参照してください。)
IdPは、Assertion Consumer Service URLに応答を送信します。リクエストは、2つのパラメータSAMLResponse
とRelayState
が含まれています。
** 注:** SAMLレスポンス(HTTP-Postなど)を送信する方法とAssertion Consumer ServiceのURLは通常、SPによって提供されるメタデータXMLのSAMLの一部としてインポートされます。Liferay DXPでは、SPのメタデータをSAMLアダプタのーのService Provider Connectionsタブ|にインポートします。
SPがSSOレスポンスを処理
SPはSAMLレスポンスを検証して処理します。Liferay DXPのSAMLソリューションには署名付きSAMLResponseメッセージが必要です。この署名プロセスはIdPの正しい識別を保証し、潜在的なSAMLレスポンスのなりすましを防ぎます。
-
一方のLiferay DXPインスタンスがIdPでもう一方がSPの場合は、SPにインポートされたSAMLメタデータXMLファイルにIdPの証明書が含まれていることを確認してください。
-
Liferay DXPがIdPで別のアプリケーションがSPの場合は、IdPから証明書をエクスポートしてSPの証明書ストアにインポートします。
SAMLレスポンスにRelayState
が含まれている場合、ユーザーはそこにリダイレクトされます。そうでなければ、SPのホームページが提供されます。
Service ProviderがSSOを開始
ほとんどの場合、認証要求はサービスプロバイダーから送信されます。
SPへのSSOリクエスト
ユーザーのブラウザがSP上に保護されたリソースまたはログインURLをリクエストすると、SPによって開始されたSSOプロセスが起動されます。Liferay DXPがSAML SPの場合、SSOは/c/portal/login
URLまたは認証を必要とする保護されたリソース(たとえば、ゲストとして表示できない文書)をリクエストすることによって開始されます。ユーザーが保護されたリソースをリクエストした場合、そのURLはRelayState
パラメータに記録されます。ユーザーが/c/portal/login
をリクエストした場合は、redirect
パラメータを提供することでRelayState
を設定することができます。
それ以外の場合、portal property
auth.forward.by.last.path
がtrue
に設定されている、最後にアクセスしたパスはRelayState
に設定されます。Liferay DXP SP以外の場合は、SSOの開始に関するベンダーのドキュメンテーションを参照してください。
IdPへの認証リクエスト
SPはIdPのSingle Sign OnサービスURLを検索してAuthnRequest
を送信します。Liferay DXPがSPの場合、設定されたSAMLdentity
Provider Connectionを検索し、SAMLAuthnRequest
を、SAMLメタデータXMLドキュメントで定義されているIdPのSingle Sign OnサービスURLに送信します。Liferay DXPは、HTTP-PostバインディングまたはHTTP-Redirectバインディングを使ってAuthnRequest
の送受信をサポートしています。HTTP-Postが推奨されています。
ユーザーがアクティブなセッションを持っていない場合、またはSPからForceAuthnSP
がリクエストされた場合、ユーザーは自分の資格情報を提供して認証を受ける必要があります。Liferay DXPがIdPの場合、Login Portletで認証が行われます。Liferay DXPはユーザーに認証リクエストする前に、AuthnRequest
をデコードおよび検証します。
IdPからのSSOレスポンス
認証後、SAMLレスポンスが構築され、SPのAssertion Consumer Service URLに送信されて検証されます。IdPは自動的にSPメタデータに基づいてこの選択を行います。
Liferay DXPがIdPとして設定されている場合、Service Provider Connectionで設定されているすべての属性は、属性ステートメントとしてレスポンスに含まれます。Assertion Consumer Service URLは、SPのSAMLメタデータXMLから検索されます。
Liferay DXPがSPとして設定されている場合、すべてのレスポンスおよびアサーションの署名が検証されます。Liferay DXPは送信者の認証をリクエストします。これは、発行IdPからのメッセージ全体の署名を介して行われます。署名がないレスポンスはすべて認証されていないと見なされ、レスポンスは拒否されます。Liferay DXP SPまたはIdP以外のベンダーの場合は、ベンダーのドキュメンテーションを参照してください。
ユーザーは、リクエストされたリソースまたはRelayState
パラメーターに含まれているURL (例えば、ユーザーがSSOを開始する前にアクセスした最後のページ)にリダイレクトされます 。
シングルログオフ
Single Log OffリクエストはユーザーのブラウザからIdPまたはSPに送信され、SLOフローはそれぞれの場合で異なります。まずIdPがSLOを開始したとします。
Identity ProviderがSLOを開始した
IdPへのSLOリクエスト
IdPが開始したSLO要求は、ユーザーのブラウザーによってIdPに直接送信されます。 Liferay DXPがIdPとして機能する場合、IdPで開始されたSSO URLは次のようにURLパスを指定する必要があります:
/c/portal/logout
ユーザが設定済みのSPにサインオンしている場合は、SAMLプラグインがログアウトプロセスを引き継ぎ、すべてのサインオンサービスを表示します。シングルログアウト画面には、各SPの認証ステータス、およびログアウトできないかSPがあるかどうかが表示されます(たとえば、SPが停止している場合やSLOをサポートしていない場合)。Liferay DXP IdP以外(Siteminder、ADFSなど)については、IdPで開始されたSLO URLの構築に関するベンダーのドキュメンテーションを参照してください。
IdPはSAMLLogoutRequest
をSPに送信します。
-
Liferay DXPがIdPとして設定されている場合、HTTP-Post、HTTP-Redirect、またはSOAPバインディングのいずれかを使用して、
LogoutRequest
が送信されます。HTTP-Postバインディングが優先されますが、ない場合は、サポートされているバインディングを持つ最初の使用可能なSLOエンドポイントが選択されます。 -
Liferay DXPがSPとして設定されている場合、
LogoutRequest
でサポートされているバインディングはHTTP-Post、HTTP-Redirect、またはSOAPです。 -
他のIdPまたはSPについては、ベンダーのドキュメンテーションを参照してください。
SPからのSLOレスポンス
SPはIdPにLogoutResponse
を配信します。
IdPはSAMLLogoutRequest
をSPに送信します。
SPはIdPにLogoutResponse
を配信します。ユーザーがログインしているすべてのSPに対してこのプロセスが繰り返されます。Liferay DXPがIdPの場合、Liferay DXPは最後のSPが配信したLogoutResponse
またはタイムアウトした後にユーザーをログアウトさせます。
Service ProviderがSLOを開始
SPへのSLOリクエスト
SPによって開始されたSLOでは、ユーザーのブラウザはログアウトリクエストを直接SPに送信します。Liferay DXPがSPとして設定されている場合、SLOは次のログアウトURLをリクエストすることによって開始されます。
/c/portal/logout
他のSPについては、SLOの開始に関するベンダーのドキュメンテーションを参照してください。
SAMLLogoutRequest
はIdPのSingle Log OutサービスURLに送信されます。
-
Liferay DXPがSPとして機能する場合、
LogoutRequest
はSAMLプロバイダーのIdP Connectionタブで設定されたIdP(IdP接続を設定するためには次の記事を参照してください:next article)およびSAMLメタデータで定義されたSLOサービスURLに送信されます。 -
Liferay DXPがIdPの場合、ユーザーが他のSPにログオンしていると、各SPログアウトの状態を示す単一のログアウト画面が現れ、ログアウトできないものも表示されます。(いくつかのSPはSLOをサポートしていないか、または現在停止中のものがある場合もあります)ログアウトするSPが他にない場合、SAMLセッションは終了し、IdPはそのセッションを破棄します。
SPからのSLOレスポンス
ユーザーが追加のSPにログインしている場合(開始SPだけでなく)、IdPはSAML LogoutRequest
を各SPに送信します。Liferay DXPがIdPの場合は、 LogoutResponse
はHTTP-Post、HTTP-Redirect、またはSOAPバインディングのいずれかを使用して送信されます。
各SPはそれぞれのLogoutResponse
をIdPに配信します。Liferay DXPがSPの場合は、 LogoutResponse
はHTTP-Post、HTTP-Redirect、またはSOAPリクエストへの直接レスポンスのいずれかを使用して送信されます。
全ての追加のSPがそれぞれのLogoutResponse
をIdPに配信した後、IdPはそのSSOセッションを破棄します。Liferay DXPがIdPの場合、最後のSPがLogoutResponse
を配信した時点、またはタイムアウトした時点でIdPはLiferay DXPセッションを破棄し、ユーザーをログアウトさせます。
最後に、IdPはSLOを開始したSPにLogoutResponse
を送信します。開始したSPはSAMLセッションを終了し、ユーザーをログアウトさせます。
関連トピック
Setting Up SAML as an Identity Provider