Liferay DXPでのSAMLの導入と管理

このトラブルシューティングガイドは、既存のSAMLドキュメントを 補完することを目的としています。 このガイドの情報は、最も一般的な使用例を示すために、より詳細に説明しています。

 

目次を見る

  1. はじめに
  2. 使用例1:Salesforceとの連携
  3. ユースケース2:LiferayをIdPとSPの両方として使用する場合
  4. ユースケース #3: メールアドレス以外のユーザー属性
  5. ユースケース #4: 安全なプロキシ接続を介した接続
  6. ユースケース #5: クラスター環境でのSAML
  7. SAMLの無効化
  8. トラブルシューティング

はじめに

繰り返しになりますが、Liferay SAMLは2つの異なる構成を提供しています。すなわち、アイデンティティ・プロバイダー(略称: IdP)としての構成と、サービス・プロバイダー(略称: SP)としての構成です。 管理者は、Liferay SAMLをADFS、Shibbolethのような他のSSO/SLOプロトコル、またはSalesforceなどのサードパーティの技術に接続することが多い。 Liferay Connector to SAML 2.0 プラグイン は、適切なバージョンを使用して Liferay DXP 7.0 から Liferay DXP 7.2 にデプロイする必要があります。 Liferay DXP 7.3 および今後の製品リリースには、コアリリースの一部として Connector プラグインが含まれています。 DXP 7.3用のプラグインのアップデートはfixpacksに含まれます。 Liferay Connector to SAML 2.0 プラグインの変更点の詳細については、リリースノートまたは変更ログを参照してください。

重要事項1:SAMLを使用するには、2つの異なるIPアドレス、または2つの異なるバーチャルホスト、または2つの異なるポートが必要です。 Windows環境では、管理者が etc/hosts ファイルにアクセスして、複数のバーチャルホストを作成することができます。 以下の例では、さまざまな設定を組み合わせて説明します。

解決

ユースケース1:Salesforceインテグレーション:SPとしてのSalesforce

管理者はSalesforceへのSSOリクエストを実行できます。 そのためには、Liferay DXPをIdPとして設定する必要があります( configuring Liferay DXP with SAML as an IdPを参照)。

  1. SAMLアプリをデプロイした状態で、Liferay DXPを起動する
  2. コントロールパネル > 設定 > SAML管理 へ移動
  3. IdP enabledチェックボックスにフラグが立っていることを確認する
  4. 証明書のダウンロード(Certificate and Private Keyセクション)をクリックする
    Certificate_and_Private_Key.png
    .pem のファイルを保存します。 このファイルは、Salesforceのmetadata.xmlを生成するためにSalesforceで必要となります。
  5. コントロールパネル > ユーザー に移動します
  6. Salesforceへのサインインに使用したメールアドレスと同じメールアドレスで、新しいユーザーを作成します。 デフォルトのtest@liferay.comを使用しないでください。
    1. 名:Salesforce
    2. 姓:Admin
    3. パスワード:samlidp1
  7. この新しいユーザーに完全な管理者ロールを与えます

次の一連のステップは、Salesforceからメタデータファイルを生成することです。

  1. http://developer.force.comに移動します。
  2. 同じ有効なEメールアドレスを使ってアカウントを作成してください。 これは、ユーザーアカウントとしても機能します。 Salesforce アカウントのパスワードとして samlidp1 を使用します。
  3. サインイン後、 salesforce.comにアクセスし、ログインした後、[Setup]をクリックします。
  4. セキュリティコントロール > シングルサインオン設定」をクリックします。
  5. Edit をクリックし、SAML Enabled チェックボックスをチェックします。
  6. 保存をクリックします。
  7. 新規をクリックします。
  8. 以下を入力します。
      • Name: samlsp
      • Issuer: samlidp
      • Entity ID: https://saml.salesforce.com
      • Identity Provider Certificate: Upload the samlidp.pem file
      • Identity Provider Login URL: http://localhost:8080/c/portal/saml/sso
      • Identity Provider Logout URL: http://localhost:8080/c/portal/logout
      • SAML Identity Type: "Assertion contains User's salesforce.com username"
      • SAML Identity Location: "Identity is in the NameIdentifier element of the Subject statement"
    07_-_samldxpsalesforce__1_.png
  9. Saveボタンをクリックします。
  10. メタデータのxmlファイルをダウンロードして、 salesforce-metadata.xmlにリネームします。

次のステップで設定が完了します。

  1. Liferay DXPでは、コントロールパネル > 設定 > SAML管理に移動します。
  2. サービス・プロバイダー接続 タブをクリックします。
  3. サービス・プロバイダーを追加 ボタンをクリックします。
  4. 以下を入力します:
    • 名前: salesforce
    • エンティティ ID: https://saml.salesforce.com
    • 有効 チェックボックスをオンにします
    • メタデータXMLをアップロード をクリック
    • salesforce-metadata.xmlをアップロード
    • 名前識別子フォーマットドロップダウンから未指定を選択
    • 名前識別子属性名フィールドに static: {email address used to sign up for Salesforce without the braces of course} を入力します
    • 属性が有効です チェックボックスをオンにします
  5. 保存ボタンをクリック

SalesforceへのSSOの実行

  1. Liferay DXPで、メニュー > Liferay DXPサイトをクリックします。
  2. ユーザーが上記で作成したユーザー(例:Salesforce Admin)としてサインインしていることを確認してください。 そうでない場合は、一度サインアウトし、正しい認証情報で再度サインインしてください。
  3. Navigationをクリック
  4. 公開ページの横にある3点イコンをクリックすると、 公開ページを追加します。
  5. 名前欄に Salesforce と入力します。
  6. タイプのドロップダウンから「 URLへのリンク 」を選択します。
  7. URL欄に http://localhost:8080/c/portal/saml/sso?entityId=https://saml.salesforce.comを入力します。
  8. ページ追加ボタンをクリックします。
  9. システムはメインページにリダイレクトします。 Salesforceのページをクリックします。 再認証しなくてもsalesforce.comのサイトにリダイレクトされるはずです。

ユースケース2:LiferayをIdPとSPの両方として使用する場合

以下のユースケースでは、SAML 認証用に 2 つの Liferay DXP バンドルを構成し、一方をサービス・プロバ イダー(SP)として機能させ、もう一方をアイデンティティ・プロバイダー(IdP)として機能させる方法を 示している。 さらに、ユーザーは複数のSPを持つことができます。 すべてのSPは、個別にIdPに追加する必要があります。 以下の手順で、SP を IdP に追加します。

Set up Liferay as a SAML Identity Provider に関する既存のドキュメントは、埋め込みリンクを介して learn.liferay.com で見ることができます。

次の手順のIDプロバイダーがサービスプロバイダーと同じマシン上にある場合、Liferay DXPに実装された変更により、SLOが期待どおりに機能するには、IDプロバイダーに個別のドメイン名を介してアクセスできる必要があります。 これは概念実証であるため、次の手順では、IDプロバイダーのこの個別のドメイン名を組み込みます。

 

SPとしてLiferay DXPバンドルを設定する:

  1. Administratorとしてログイン
  2. メニューアイコン > コントロールパネル > セキュリティ > SAML管理 へ移動
  3. 一般 タブ:
  • 選択 - SAMLロール: サービス・プロバイダー
  • 入力 - エンティティ ID: samlsp
  • 保存 をクリック
  • 証明書と秘密鍵 で、証明書の作成 をクリック
    • 共通名: Joe Bloggs
    • 組織: Liferay
    • 組織単位: Liferay Inc
    • 地域: Diamond Bar
    • 状態: CA
    • 国: USA
    • 有効期限(日): 356
    • 鍵のアルゴリズム: RSA
    • キー長(ビット単位): 2048
    • キーのパスワード: liferaysp
  • 有効 のチェックボックスをオンにして、[保存]をクリックします
  • Liferay DPX バンドルを IdP として設定する:

    1. Administratorとしてログイン
    2. liferaytest.comのバーチャルホストを使用するようにバンドルを設定し、このドメインが実行可能になるようにローカル環境のhostsファイルを設定します。
    3. メニューアイコン > コントロールパネル > セキュリティ > SAML管理 へ移動
    4. 一般 タブ:
    • 選択 - SAMLロール: Identity Provider
    • Enter - Entity Id: samlidp
  • 保存 をクリック
  • 証明書と秘密鍵 で、証明書の作成 をクリックします
    • 共通名:Joe Bloggs
    • 組織:Liferay
    • 組織単位:Liferay Inc
    • 地域:Diamond Bar
    • 状態:CA
    • 国:USA
    • 有効期限(日):356
    • 鍵のアルゴリズム:RSA
    • キー長(ビット単位):2048
    • キーのパスワード:liferayidp
  • 一般 タブで、有効 チェックボックスをクリックし、保存 をクリックします
  • サービス・プロバイダー接続 タブを選択し、サービス・プロバイダーを追加 を選択します
    • 名:samlsp
    • エンティティ ID:samlsp
    • 有効:チェック済み
    • メタデータ URL:http://localhost:8080/c/portal/saml/metadata
    • 名前識別子フォーマット:Email Address
    • 名前識別子属性名:emailAddress
  • 保存 をクリックします。構成が正常に保存された場合は、サービス・プロバイダーの接続 タブに戻る必要があります。
  • サービスプロバイダーLiferay DXPバンドルに戻る:

    1. アカウントがサインアウトされている場合は、管理者としてサインイン
    2. SAML管理メニューに戻る
    3. アイデンティティ・プロバイダー接続 を選択し、アイデンティティ・プロバイダーを追加 をクリック
    • 名:samlidp
    • エンティティ ID:samlidp
    • 有効:チェックあり
    • メタデータ URL:http://liferaytest.com:9080/c/portal/saml/metadata
    • 名前識別子フォーマット:Email Address
  • 保存 をクリック
  • SAML認証のテスト:

    1. テスト目的のみで、本番では実行しないでください。ログインポートレットをサービスプロバイダのランディングページに追加します。SAML 設定が正しくない場合、これにより SAML 認証を完全にバイパスしてサービス プロバイダに直接ログインできます。
    2. SPバンドルからサインアウトする、または別のブラウザを使用する
    3. SPバンドルへアクセス
    4. 右上の「ログイン」ボタンをクリック
    5. この場合、ユーザーはIdPにリダイレクトされる必要があります http://liferaytest.com:9080/web/guest/home?...
    6. 提供されたポートレットを使ってログイン
    7. ユーザーはSPにリダイレクトされ、そこでログインする必要があります

    ユースケース #3: メールアドレス以外のユーザー属性

    Configuring Service Provider and Identity Provider Connections のドキュメントでは、属性マッピングと、期待通りに動作するためにマッピングをどのように構成する必要があるかについて説明しています。 以下の情報は、一部の ID プロバイダに見られる具体的な使用例を示しています。

    • ユーザーは、メールアドレス以外の属性を使って認証を行うことができます。 例えば、Salesforceの統合に関わるユースケースでは、ユーザーは「名前の識別子」を「Unspecified」に変更し、他の値を入力する必要があります(例:static:${salesforce-user-name} または static:${user-email-address}.
    • 他の属性の例としては、Shibbolethとの統合があります。 IdPがADFSやShibbolethで、SPがLiferayというユースケースもあります。 ADFSの設定に応じて、ファーストネームやラストネームなどの他の属性を使用することができます。 Shibbolethはスクリーンネームを使って認証することができます。 SPでは、「Name Identifier Format」を「Email Address」から「Unspecified」に変更します。

    ユースケース #4: 安全なプロキシ接続での接続

    一般的なDXP 7.0の環境では、2つのIdPとSPのサーバーだけでなく、それ以外のサーバーも通信していることがよくあります。 また、クラスター化された環境では、ロードバランサーサーバー(これは必須ではありませんが、非常に強く推奨されています)や、Webリクエストを処理するためのWebサーバーがあるかもしれません。 セキュリティを強化するために、管理者はデフォルトの https プロトコルではなく、 httpを使用します。 Liferay Connector to SAML 2.0プラグインは、アサーション・プロセスがHTTPからHTTPSにリダイレクトするように構成されている限り、IdPが開始したSSOとSPが開始したSSO の両方を実行できます

    SAML コネクタ固有のプラグインに関するドキュメントは、 Configuring Service Provider and Identity Provider Connections ページにあります。 以下は、Liferay DXPバンドル内のHTTPSの構成と、SAML管理ページ内で必要な構成の両方の概念実証手順です。

    セキュアポート443へのリダイレクトを有効にする方法や構成は、アプリケーションサーバごとに異なりますが、DXP 7.0の portal-ext.propertiesで必要な変更は1つだけです。

    portal.instance.protocol=https
    web.server.protocol=https
    


    これらのプロパティが portal-ext.properties ファイルに追加されると、ポータルは送信される HTTPS メッセージを認識し、SAML アサーション・プロセスを通じて正常に送信されるようになります。

    最後に、管理者は SAML Admin Control Panelで SSL Required が有効になっていることを 確認する必要があります。 そのためには:

    1. コントロールパネル > 設定 > SAML管理 へ移動
    2. DXP7.0のこのインスタンスがSAML IdPサーバーとして構成されている場合は、アイデンティティ・プロバイダータブのSSLを必須にするチェックボックスをオンにします
      Identify_Provider_-_SSL_Required.png
    3. SAML SPサーバーとして設定されたDXP 7.0インスタンスの場合も同様です。サービス・プロバイダータブのSSLを必須にするチェックボックスをオンにします
      サービス_プロバイダー_-_SSL_Required.png
    4. 保存 をクリックします

    ユースケース #5: クラスター環境でのSAML

    この 公式ドキュメントの「クラスター環境でのSAMLの設定」のセクションを参照してください。

    SAMLの無効化

    SAMLを無効にするにはいくつかの方法があります。 それぞれの方法は微妙に異なり、様々な状況を反映しています。

    ユースケース1:UI経由
    IdPとしてDXP 7.0が設定されているとします。 最も簡単な方法は、コントロールパネルのUIを使って、このインスタンスのSSO/SLO機能を無効にすることです。 SAMLを有効にして動作している他のインスタンスを無効にする必要があります。

    1. システム管理者としてサインイン
    2. コントロールパネル→設定→SAML管理 へ移動
    3. 一般 タブの 有効 チェックボックスのチェックを外します
      Service_Provider_-disable.png
    4. 保存 をクリックします

    この時点では、Liferay SAMLアプリはプラットフォーム上に展開されていますが、ユーザーはSSOなしでサインインすることになります。

    ユースケース2:URLの調整
    このシナリオでは、SPとしてDXP 7.0が設定されていると仮定します。 サービスプロバイダーとして、プラットフォームはIdPまたはADFSのようなアクティブディレクトリとして構成された別のインスタンスに接続されます。 デフォルトのゲストサイトにはログインアプリケーションがないため、ユーザーはSAMLを使用してログインする必要があります。 SSOを回避してプラットフォームにアクセスするには、URLを変更することで可能となります。

    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=%2Flogin%2Flogin 

    例: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=%2Flogin%2Flogin

    サインイン後、システム管理者は最初のユースケースと同じ方法でLiferay SAML Providerを非活性化することができます。 前述の通り、ログインアプリケーションはSAML認証機能をバイパスしており、その拡張URLを使って呼び出されていました。 ランディングページが /web/guest/home にない場合は、ログインアプリケーションをページに追加します。
    Service_Provider_-_login_portlet.png
    この図は、SAMLをバイパスするモックアップページへのログインアプリの追加を示しています。

    ユースケース3:OSGi config ファイルを使用する
    この使用例では、バックエンドからSAMLを無効にします。 DXP 7.0ではOSGiが実装されているため、リスクが少なく、ランタイムペナルティも少なくなっています。 このユースケースでは、1) データベースの configuration_ テーブルで値を見つけることと、2) config ファイルを作成することの 2 つが必要です。

    1. どのデータベースでも、configuration_ テーブルを検索します(例:MySQL 5.7 Command Line Client では、select * from configuration_ \G; 注: \G はオプションです。値を読みやすくしています)
    2. com.liferay.saml.runtime.configuration.SamlProviderConfiguration.xxxxxx.xxxx.xxxx.x を検索します(ここでの番号部分はそれぞれのケースで異なります)
    3. /osgi/configs フォルダの中に、code>com.liferay.saml.runtime.configuration.SamlProviderConfiguration-xxxxxxx.xxxxxxx.config という名前のファイルを作成します
      • 重要な注意点1:ID文字列が含まれている必要があります。
      • 重要な注意点2: ハッシュ値を...SAMLProvider Configuration... から分離するには、ハイフンが必要です(例: com.liferay.saml.runtime.configuration.SamlProviderConfiguration-bda43632-74fc-458a-9bb7-5f4c4e81fb96
    4. そのファイルの中に、以下のように入力します: enabled=B "false".

    手順が完了すると、Liferay SAML Providerは無効になり、インスタンスを再起動しても再び有効になることはありません。 SAMLを再び有効にするには、このファイルを削除するか、値を saml.enabled=trueに戻してください。



    トラブルシューティング

    SAMLの問題は多くの場合、設定の問題です。 ユーザーがステップをスキップしたり、値を間違って入力した可能性があります。 とはいえ、よくある質問についてはここで紹介しています。

    1. どちらのインスタンスでもSLOを実行できません。
    通常、この現象は次のようなシナリオの1つ以上によって引き起こされます。

    1. ユーザーがログインポートレットで「ログイン情報を記録する」をチェックしないでください
    2. SAMLタイムアウトはLiferayタイムアウトよりも短くする必要があります。 この2番目のシナリオでは、SAMLタイムアウトがLiferayタイムアウトよりも長い場合、システムは「ログイン情報を記録する」がチェックされているかのように動作します。 解決策は、SAMLタイムアウトを180秒に設定することです。
    3. ユーザーは、ポータル設定でslo_redirect以外のものを定義しました。コントロールパネル > ポータル設定に移動し、c/portal/saml/slo_redirectに変更します。

    2. IdPがメタデータのダウンロードに対応していない場合は? Liferay SPは、証明書のインストール(Salesforceと同様)をサポートしていますか?

    回答:SAML Metadata XMLを提供する必要があります。 これは、URLまたはファイルで提供されます。 IdP が SAML メタデータをサポートしていない場合は、XMLファイルを手動で作成する必要があります。

    3. セッションタイムアウトとアサーションライフタイムとは何ですか? どのように違うのですか?

    セッションタイムアウトとは、SAMLIdPがSPに接続されたままになる時間を指します。 Liferayポータルのコンテキストでは、SAMLセッションのタイムアウトがポータルのタイムアウトよりも短いことを確認してください。そうでない場合、SLOは機能しません。 ユーザーの非アクティブが原因でセッションが終了した場合、ユーザーは再認証する必要があります。

    アサーションの有効期間とは、IdPとSPの間のアサーションが有効である期間を指します。 サーバーの時刻が同期していない場合、アサーションは期限切れになるか、認識されない可能性があります。 通常、これは秒単位で測定されます。 これを修正するには、それに応じてクロックスキュー機能を調整します。

    4. 自分のカスタムキーストアをアップロードできますか?

    最新バージョンのLiferay SAML 2.0 Providerでは、管理者はデフォルトのバージョンを使用する代わりに、キーストア(.jks)ファイルを追加することができます。 Liferay Marketplaceから Liferay SAML 2.0 Provider version 3.1.0 をダウンロードします。 このバージョンには、DXP 7.0 Fix Pack DE-32以上が必要です。古いLiferaySAML 2.0プロバイダーバージョン3.0.0には、この機能がないことに注意してください。

    アプリがデプロイされたら、次の手順を使用してプラットフォームを構成します。

    1. コントロールパネル → 設定 → システム設定に移動します。
    2. Foundation タブをクリックします
    3. SAML KeyStoreManager Implementation Configuration を検索します
    4. ドロップダウンから Filesystem Keystore Manager を選択し、保存をクリックします
      SAML_-_KeystoreManager.png
    5. 以前の検索結果がまだ表示されている場合は、SAML設定をクリックします。 それ以外の場合は、検索してください。
    6. SAML設定 ページで、新しいキーストアのパスを入力します。 デフォルトでは、キーストアは ${liferay.home}/data/keystore.jksに格納されています。
      SAML_-_KeyStorePath.png
    7. 保存 をクリックします
    8. この時点で、プラットフォームは新しいキーストアファイルを認識します

    5. Liferay SAMLのコンフィグレーションは、データベースのどこに保存されていますか?

    Liferay SAML configurations は、DXP 7.0 (7.1も同様)では configuration_ というデータベーステーブルに格納されています。 3.1.0 バージョンのアプリでは、0 (7.1も同様)となっています (詳細は こちら)。 データベースのテーブルを調べたい場合は、それぞれのテーブルに格納されているデータを取得する方法について、データベースのマニュアルを参照してください。 たとえば、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として設定されており、その entityIdsamlidpで、キーストアのパスワードは 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を参照してください。

    この記事は役に立ちましたか?
    1人中1人がこの記事が役に立ったと言っています