このトラブルシューティング・ガイドは、既存の SAML ドキュメントを補足することを目的としています。 このガイドでは、最も一般的な使用例を示すために、より詳細に説明しています。
目次
- 序章
- ユースケース #1: Salesforce との統合
- 事例2:IdPとSPの両方としてのLiferayの使用
- ユースケース3: メールアドレス以外のユーザー属性
- 使用例4: 安全なプロキシ接続による接続
- ユースケース 5: クラスタ環境での SAML
- SAMLを無効にする
- トラブルシューティング
導入
繰り返しになりますが、Liferay SAMLは2つの異なる構成を提供します:IdPとしてのIdentity Provider (abbrev.)とSPとしてのService Provider (abbrev.)です。 管理者は、どちらの構成でも Liferay SAML を ADFS、Shibboleth のような別の SSO/SLO プロトコル、または Salesforce などのサードパーティのテクノロジに接続することが多い。 Liferay SAMLプラグインのバージョン3.xはLiferay DXP専用です。 最新の SAML プラグインバージョン 3.x での変更点の詳細については、リリースノートまたは変更ログを参照してください。
重要な注意事項 1:SAML を使用するには、2 つの異なる IP アドレス、または 2 つの異なるバーチャル・ホスト、または 2 つの異なるポートが必要である。 Windows 環境では、管理者は etc/hosts
ファイルにアクセスして、複数のバーチャルホストを作成することができます。 以下の例では、異なる設定の組み合わせをイラストとして使用します。
決議
ユースケース #1: Salesforce の統合。SPとしてのSalesforce。
管理者はSalesforceへのSSOリクエストを実行できます。 これを行うには、Liferay DXPをIdPとして構成する必要があります( SAMLでLiferay DXPをIdPとして構成するを参照)。
- SAMLアプリをデプロイした状態でLiferay DXPを起動します。
- コントロール・パネル > 構成 > SAML Admin に移動する。
- IdPが有効になっているチェックボックスにフラグが立っていることを確認します。
- 証明書のダウンロード]をクリックします([証明書と秘密鍵]セクション)。
.pem
ファイルを保存します。 このファイルは、Salesforceのメタデータ.xmlを生成するためにSalesforce上で必要になります。 - コントロールパネル > ユーザーに移動します。
- Salesforce へのサインインに使用したメールアドレスと同じメールアドレスを持つ新しいユーザーを作成します。 ではなく でデフォルトの test@liferay.com を使用してください。
- ファーストネームです。セールスフォース
- 苗字。管理者
- パスワード:samlidp1
- この新しいユーザーに完全な管理者の役割を付与します。
次の一連の流れは、Salesforceからメタデータファイルを生成することです。
- http://developer.force.comに移動します。
- 同じ有効なメールアドレスを使用してアカウントを作成します。 これはユーザーアカウントとしても機能します。 Salesforce アカウントのパスワードには samlidp1 を使用します。
- サインインしたら、 salesforce.comにアクセスし、ログインしてから [セットアップ] をクリックします。
- セキュリティコントロール > シングルサインオンの設定をクリックします。
- をクリックし、 を編集し、SAML Enabledチェックボックスをチェックする。
- 保存をクリックします。
- 新しいをクリックします。
- 以下のように入力してください。
- 名前: samlsp
- 発行者:samlidp
- エンティティ ID: https://saml.salesforce.com
- アイデンティティ・プロバイダ証明書をアップロードします。samlidp.pemファイルのアップロード
- アイデンティティプロバイダーのログインURL: http://localhost:8080/c/portal/saml/sso
- ID プロバイダ ログアウト URL: http://localhost:8080/c/portal/logout
- SAML Identity Type。"アサーションにはユーザの salesforce.com ユーザ名が含まれます。
- SAML Identity の場所。"Identifier は、Subject 文の NameIdentifier 要素にあります"
- 保存ボタンをクリックします。
- メタデータ xml ファイルをダウンロードして、
salesforce-metadata.xml
に名前を変更します。
次のステップでセットアップが完了します。
- Liferay DXPで、コントロール・パネル > 構成 >SAML Adminに移動します。
- サービスプロバイダ接続] タブをクリックします。
- サービスプロバイダの追加ボタンをクリックします。
- 以下のように入力してください。
- 名称: セールスフォース
- エンティティ ID: https://saml.salesforce.com
- 有効にする] チェックボックスにチェックを入れます。
- メタデータXMLのアップロードをクリックします。
salesforce-metadata.xml
をアップロードします。- Name Identifier Format(名前の識別子の形式)のドロップダウンから Unspecified を選択します。
- 静的に入力します。 Name Identifier Attribute Name フィールドに {email address used to sign up for Salesforce without the braces of course} を入力してください。
- 属性を有効にする] ボックスにチェックを入れます。
- 保存ボタンをクリックします。
SalesforceへのSSOを実行
- Liferay DXPで、メニュー > Liferay DXPサイトをクリックします。
- ユーザが上記で作成したユーザ (Salesforce Admin など) としてサインインしていることを確認してください。 そうでない場合は、サインアウトして、正しい資格情報で再度サインインしてください。
- ナビゲーションをクリック
- 公開ページ > の横にある3つのドットアイコンをクリックして、公開ページを追加します。
- 名前欄には、 Salesforce と入力します。
- タイプのドロップダウンから URLへのリンク を選択します。
- URL欄に入力します。
http://localhost:8080/c/portal/saml/sso?entityId=https://saml.salesforce.com
- ページの追加ボタンをクリックします。
- メインページにリダイレクトされます。 Salesforceのページをクリックします。 再認証しなくても salesforce.com サイトにリダイレクトされるはずです。
ケース 2: IdP と SP の両方としての Liferay 使用例
このユースケースでは、LiferayはIdPとSPの両方の役割を果たすことができます。 さらに、ユーザーは複数のSPを持つことができます。 各SPは個別にIdPに追加する必要があります。 IdP に SP を追加するには、以下の手順に従ってください。
- すべてのSPインスタンスが起動されていることを確認します。 エンドポイントが無効であるというエラーメッセージが出るので、これは重要です。
- ユーザーがサインインしていることを確認する "Remember Me" がチェックされていないことを確認します。
- コントロール・パネル > 構成 > SAML 管理者に移動する。
- サービスプロバイダ接続] タブをクリックします。
- サービスプロバイダの追加をクリックします。
- 以下のように入力してください。
- 名前: samlsp
- エンティティID: samlsp
- 有効: チェック済み
- メタデータURL: http://www.alpha.com:9080/c/portal/saml/metadata
- 名前の識別子のフォーマット。メールアドレス
- 名前 識別子 属性名: emailAddress
- 保存ボタンをクリックします。
- これをユニークなSPが追加されるたびに繰り返します。
すべての SP が追加されると、Liferay SAML は、SSO/SLO を実行する 2 つの異なる方法を提供します。
IdPが起動したSSO/SLO IdPが起動したSSO/SLO
- 手順に従って、最初のLiferay DXPバンドルをIdPとして設定します。 例の SP のバーチャルホスト名は www.alpha.com:9080 です。
- ユーザーがサインインしていることを確認する "Remember Me" がチェックされていないことを確認します。
- IdPブラウザのURLに以下のように入力します。
http://localhost:8080/c/portal/saml/sso?entityId=samlsp&RelayState=http://www.alpha.com:9080
と入力してください。 - IdPがSPにリダイレクトしているのを見てください。 両方のインスタンスに同じメールアドレスの同じユーザーが存在する場合、認証してSPを表示します。 ADFSでもLiferayインスタンスでも、1つのインスタンスでしかユーザーが見つからない場合、認証に失敗します。 SAML は、主要なポータル・バージョン間で認証することができ、IdP は Portal 6.1 EE GA3 または Liferay Portal 6.2 EE、SP は Portal 6.2 とすることができる。 EE GA1かLiferay DXP。 テスト目的では、IdP と SP が異なるポータルのバージョンであれば、認証が成功するか失敗するかは明らかです。
- SPでは、別に時間を区切ってサインをする必要はありません。
- IdPを表示する新しいブラウザウィンドウを開きます。 サインアウトをクリックしてください。
- すべてのインスタンスでSLOを実行するために実行するjavascriptがあります。 IdP がログアウトしたら、SP インスタンスに移動します。 SP インスタンスのブラウザ ウィンドウをリフレッシュします。
- SPもサインアウトしているだろう。
- www.able.com:9080 の SP ブラウザのウィンドウで、右上の「サインイン」リンクをクリックします。 サインインポートレットを使用しないでください。
- ブラウザは IdP インスタンスの Sign In ポートレットにリダイレクトします。
- サインインしてください。 リメンバー・ミー」はチェックしないでください。
- SPにリダイレクトされます。
- IdPへの新しいブラウザウィンドウを開きます。 この場合は、localhost:8080です。
- IdPにはすでにサインが入っているでしょう。
- SPインスタンスに移動します。
- サインアウトをクリックしてください。
- IdP インスタンスに移動します。 ブラウザのウィンドウをリフレッシュします。 IdPはサインアウトされます。
ユースケース3: メールアドレス以外のユーザー属性
ユーザーは、メールアドレス以外にも他の属性を使用して認証を行うことができます。 例えば、Salesforceとの統合に関わるユースケースでは、ユーザーはName IdentifierをUnspecifiedに変更し、他の値を入力する必要があります(例えば、static.${salesforce-user-name} または static.${user-email-address}または静的:
.
他の属性がShibbolethと統合されているもう一つの例。 IdPがADFSかShibbolethでSPがLiferayというユースケースがあります。 ADFSの構成方法によっては、ファーストネームやラストネームなどの他の属性を使用することができます。 Shibbolethはスクリーンネームを使って認証することができます。 SPでは、名前の識別子の形式を「メールアドレス」から「未指定」に変更します。
使用例4: 安全なプロキシ接続による接続
典型的なDXP 7.0環境では、2つのIdPサーバとSPサーバが互いに通信しているだけではないことがよくあります。 また、クラスター化された環境にロードバランサーサーバ(これは実際には必要ない場合は非常に強く推奨されます)とWebリクエストを処理するためのWebサーバがあるかもしれません。 セキュリティを強化するために、管理者はデフォルトの http
の代わりに https
プロトコルを使用します。 DXP 7.0 にデプロイされた SAML プラグインは、アサーション・プロセスが HTTP から HTTPS にリダイレクトするように構成されている限り、IdP が開始した SSO と SP が開始した SSO の両方を実行することができます。
アプリケーションサーバーごとに、セキュアポート443へのリダイレクトを有効にして設定する方法は異なりますが、DXP 7.0の portal-ext.properties
に必要な変更は1つだけです。
portal.instance.protocol=https web.server.protocol=https
これらのプロパティが portal-ext.properties
ファイルに追加されると、ポータルは送信された HTTPS メッセージを認識し、SAML アサーション・プロセスを通じて正常に送信する。
最後に、管理者 は、 がSAML管理者コントロール・パネルで SSL Required が有効になっていることを確認する必要がある。 そうするために。
- コントロール・パネル > 構成 > SAML Admin に移動する。
- この DXP 7.0 のインスタンスが SAML IdP サーバとして構成されている場合は、Identity Provider タブの SSL Required チェックボックスをチェックします。
- SAML SP サーバとして構成された DXP 7.0 インスタンスについても同様である。 Check the SSL Required check box in the Service Provider tab.
- をクリックしてを保存します。
ユースケース 5: クラスタ環境での SAML
この 公式ドキュメントの「クラスタ環境での SAML のセットアップ」のセクションを参照のこと。
SAMLを無効にする
SAML を無効にする方法はいくつかある。 それぞれの方法は微妙に違っていて、それぞれの状況を反映しています。
ユースケース 1: UI を介して
DXP 7.0 が IdP として構成されていると仮定します。 最も簡単な方法は、コントロールパネルの UI を通して、このインスタンスの SSO/SLO 機能を無効にすることです。 SAML を有効にして実行している他のインスタンスを無効にする必要がある。
- システム管理者としてログインします。
- のコントロールパネル→構成→SAML Adminに移動する。
- General タブの Enabled チェックボックスのチェックを外します。
- をクリックしてを保存します。
この時点では、Liferay SAMLアプリはまだプラットフォーム上に配置されていますが、ユーザーはSSOなしでサインインするようになります。
ユースケース2:URLの調整
このシナリオでは、SPとしてDXP 7.0が設定されていると仮定します。 サービスプロバイダとして、プラットフォームはIdPやADFSのようなアクティブディレクトリとして構成された別のインスタンスに接続されています。 デフォルトのゲストサイトにはサインイン・アプリケーションがないため、ユーザーはSAMLを使用してサインインすることを余儀なくされます。 SSOをバイパスしてプラットフォームにアクセスするには、URLを変更することで可能です。
次のように追加します。 ?p_p_id=com_liferay_login_web_portlet_LoginPortlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&saveLastPath=false&_com_liferay_login_web_portlet_LoginPortlet_mvcRenderCommandName=%2Fログイン%2Fログイン
URLの最後まで。
例です。 http://www.able.com:8080?p_p_id=com_liferay_login_web_portlet_LoginPortlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&?saveLastPath=false&_com_liferay_login_web_portlet_LoginPortlet_mvcRenderCommandName=%2Fログイン%2Fログイン
ログインします。
サインインすると、システム管理者は、最初のユースケースと同じ方法で Liferay SAML プロバイダを非アクティブにすることができる。 上述したように、Sign In アプリケーションは SAML 認証機能をバイパスしており、その拡張 URL を使用して起動された。 ランディングページが/web/guest/homeにない場合は、 サインイン アプリケーションをページに追加します。
この写真は、SAML をバイパスしたモックアップ・ページに Sign In アプリを追加したことを示しています。
ユースケース 3: OSGi を使用する config
File
このユースケースでは、バックエンドから SAML を無効にします。 DXP 7.0でOSGiを実装しているため、リスクが少なく、実行時のペナルティも少ない。 このユースケースでは、次の2つの部分が必要です:1) データベース内の コンフィグレーション_
テーブルの値を見つけることと、2) コンフィグ
ファイルを作成することです。
- どのようなデータベースでも、
configuration_
テーブルを検索します (例えば、MySQL 5.7 コマンドライン・クライアントでは、select * from configuration_ \G;
. 注:\G
はオプションです。) com.liferay.saml.runtime.configuration.SamlProviderConfiguration.xxxxxx.xxxx.xxxx.xxxx.xxxx.x
を探してください(ここで番号がついている部分はそれぞれ違って見えます)。/osgi/configs
フォルダに、code>com.liferay.saml.runtime.config.SamlProviderConfiguration-xxxxxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.configという名前のファイルを作成します。- 重要な注意1: には、 にID文字列が含まれていなければなりません。
- 重要な注意2: は、
...SAMLProvider Configuration...からハッシュ値を分離するために、
にハイフンを使用しなければなりません。 (例:com.liferay.saml.runtime.configuration.SamlProviderConfiguration-bda43632-74fc-458a-9bb7-5f4c4e81fb96
)。
- そのファイルの中に、次のように入力します。
saml.enabled=false
.
ステップが完了すると、Liferay SAML プロバイダは無効化され、インスタンスを再起動する必要がある場合には、再度有効化されることはない。 SAML を再有効化するには、このファイルを削除するか、値を saml.enabled=true
に戻す。
トラブルシューティング
SAML の問題は構成の問題であることが多い。 ユーザーがステップを飛ばしたり、値を誤って入力したりした可能性があります。 それにもかかわらず、より多くの一般的な質問のいくつかはここで行われています。
1. どちらのインスタンスでも SLO を実行できません!
通常、以下のシナリオのうち1つ以上が原因です。
- ユーザーは「サインインポートレットで私を覚えている」というフラグを立てることはできません。
- SAML のタイムアウトは、Liferay のタイムアウトよりも短くする必要があります。 この 2 番目のシナリオでは、SAML タイムアウトが Liferay タイムアウトよりも長い場合、システムは「Remember Me」がチェックされているかのように動作します。 解決策は、SAMLのタイムアウトを180秒に設定することです。
- ユーザーはポータル設定で slo_redirect 以外のものを定義しています。 コントロールパネル > のポータル設定に移動し、設定を c/portal/saml/slo_redirect に変更します。
2. IdPがメタデータのダウンロードをサポートしていない場合は? Liferay SPは証明書(Salesforceと同様)のインストールに対応していますか?
回答。SAMLメタデータXMLを提供する必要があります。 それはURLまたはファイルのいずれかで提供することができます。 IdP が SAML メタデータをサポートしていない場合は、XML ファイルを手動で作成する必要がある。
3. セッション・タイムアウトとアサーション・ライフタイムとは何ですか? これらはどのように異なるのか?
セッション・タイムアウトとは、SAML IdP が SP に接続されたままでいる時間のことである。 Liferay Portal のコンテキストでは、SAML セッションのタイムアウトがポータルのタイムアウトよりも短いことを確認してください。 ユーザが活動していないためにセッションが終了した場合、ユーザは再認証を行う必要があります。
アサーションの有効期限は、IdP と SP 間のアサーションがどれくらいの期間有効かを示します。 サーバーの時間が同期していないと、アサーションが期限切れになったり、認識されなくなったりすることがあります。 通常、これは秒単位で計測されます。 これを修正するには、クロックスキュー機能を適宜調整してください。
4. 独自のカスタムキーストアをアップロードできますか?
Liferay SAML 2.0 Providerの最新バージョンでは、管理者がデフォルトバージョンを使用する代わりに、キーストア(.jks)ファイルを追加することができます。 Liferayマーケットプレイスから Liferay SAML 2.0 Providerバージョン3.1.0 をダウンロードしてください。 このバージョンでは、DXP 7.0 Fix Pack DE-32以上が必要です。 古いLiferay SAML 2.0 Providerバージョン 3.0.0 には、 ではなく にはこの機能がないことに注意してください。
アプリがデプロイされたら、以下の手順でプラットフォームを設定します。
- コントロールパネル → 設定 → システム設定に移動します。
- ファンデーション タブをクリックします。
- SAML KeyStoreManagerの実装構成を検索する。
- ドロップダウンから Filesystem Keystore Manager を選択し、 Updateをクリックします。
- 前の検索結果がまだ表示されている場合は、 SAML Configurationをクリックする。 そうでなければ、検索してみてください。
- SAML Configuration ページで、新しいキーストアへのパスを入力する。 デフォルトでは、キーストアは
${liferay.home}/data/keystore.jks
に格納されます。
- をクリックしてを保存します。
- この時点で、プラットフォームは新しいキーストアファイルを認識します。
5. Liferay SAML構成はデータベースのどこに保存されていますか?
Liferay SAML構成は、DXP 7の configuration_
というデータベース・テーブルに格納されています。0 (および7.1も) アプリの 3.1.0 バージョンの場合と同様です (詳細は のを参照してください)。 データベースのテーブルを検査したい場合は、それぞれのテーブルに保存されているデータを取得する方法について、データベースのマニュアルを参照してください。 例えば、MySQLコマンドコンソールで、 select * from configuration_ \G;
(ここで、 \G
は、結果を縦に表示し、読みやすくします) と入力します。
こんな感じになります。
configurationId: com.liferay.portal.security.auth.verifier.internal.basic.auth.header.module.configuration.BasicAuthHeaderAuthVerifierConfiguration.f0d64ebc-896b-4606-b907-2edba57850ce dictionary: enabled="true" felix.fileinstall.filename="com.liferay.portal.security.auth.verifier.internal.basic.auth.header.module.configuration.BasicAuthHeaderAuthVerifierConfiguration-default.cfg" service.factoryPid="com.liferay.portal.security.auth.verifier.internal.basic.auth.header.module.configuration.BasicAuthHeaderAuthVerifierConfiguration" service.pid="com.liferay.portal.security.auth.verifier.internal.basic.auth.header.module.configuration.BasicAuthHeaderAuthVerifierConfiguration.f0d64ebc-896b-4606-b907-2edba57850ce" urlsExcludes="/api/liferay*" urlsIncludes="/api/*,/xmlrpc*"
保存されている実際の設定値が表示されるまで、下にスクロールし続けます。 この例では、このLiferay DXPインスタンスがIdPとして構成されています。 entityId
は samlidp、keystore パスワードは password
、SSL は
は必要ありません。
configurationId: com.liferay.saml.runtime.configuration.SamlProviderConfiguration.338a3905-8765-4701-872b-7352cf975341 dictionary: companyId=L"20115" saml.enabled="true" saml.entity.id="samlidp" saml.idp.authn.request.signature.required="true" saml.idp.session.maximum.age="0" saml.idp.session.timeout="0" saml.keystore.credential.password="password" saml.role="idp" saml.sign.metadata="true" saml.ssl.required="false" service.bundleLocation="?" service.factoryPid="com.liferay.saml.runtime.configuration.SamlProviderConfiguration" service.pid="com.liferay.saml.runtime.configuration.SamlProviderConfiguration.338a3905-8765-4701-872b-7352cf975341"
SAML アプリには、以下の の configurationIds が接続されている。
com.liferay.saml.opensaml.integration.internal.transport.configuration.HttpClientFactoryConfiguration
com.liferay.saml.runtime.configuration.SamlProviderConfiguration
com.liferay.saml.runtime.configuration.SamlConfiguration
重要な注意: レガシーの Liferay Portal 6.2 に SAML をデプロイした顧客は、この変更に注意する必要があります。 以前は、これは PortalPreferences
というテーブルに格納されていました。
追加情報
以前のバージョンを参照するには、 SAML Comprehensive Quick Start Guide for Liferay Portalを参照してください。