SAMLを使用した認証

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サイクルに入ることがあります。

図1: Identity Providerが開始した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つのパラメータSAMLResponseRelayStateが含まれています。

** 注:** 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を開始

ほとんどの場合、認証要求はサービスプロバイダーから送信されます。

図2: Service Providerが開始したSSO

SPへのSSOリクエスト

ユーザーのブラウザがSP上に保護されたリソースまたはログインURLをリクエストすると、SPによって開始されたSSOプロセスが起動されます。Liferay DXPがSAML SPの場合、SSOは/c/portal/loginURLまたは認証を必要とする保護されたリソース(たとえば、ゲストとして表示できない文書)をリクエストすることによって開始されます。ユーザーが保護されたリソースをリクエストした場合、そのURLはRelayStateパラメータに記録されます。ユーザーが/c/portal/loginをリクエストした場合は、redirectパラメータを提供することでRelayStateを設定することができます。 それ以外の場合、portal property auth.forward.by.last.pathtrueに設定されている、最後にアクセスしたパスは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を開始した

図3: 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を開始

図 4: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

Setting Up SAML as a Service Provider

Token-Based SSO Authentication

« Liferay DXPの保護SAML Identity ProviderとしてLiferay DXPを設定する »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています