legacy-knowledge-base
公開されました Jul. 2, 2025

Liferay DXPを複数のIdPで構成する方法(SAMLとOIDCによるOKTA)。

written-by

Laura Li

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

この記事は、Liferay DXP 7.x を2つのSSOプロトコル(SAML 2.0 を使用する Okta と Google OpenID Connect)で動作するサービスプロバイダとして設定する方法について説明しています。 基本的な設定はLiferay内ですぐに実現できますが、完全に機能させるためには追加のカスタムコードが必要です。 今回は、その両方の側面から解説します。

基本設定

Okta - SAML 2.0を使用したLiferayの統合

アイデンティティ・プロバイダーとしてOkta、サービス・プロバイダーとしてLiferay DXPを提供します。

ステップ1 - Oktaアカウント作成

  1. このリンクをクリックして、Oktaのテストアカウントを作成します https://developer.okta.com/signup/. Oktaのウェブサイトに移動します。
  2. 必要事項を入力すると、入力されたメールアドレスにOkta開発者アカウント有効化のお知らせが届きます。 Activate your account をクリックすると、アカウントが有効になり、Okta developer consoleにナビゲートされます。

ステップ2 - Oktaでのアプリケーションの作成

  1. 左メニューの「 アプリケーション」をクリック -> アプリケーション > アプリ統合の作成 > SAML 2.0の確認 (SAMLを利用して統合するので)
  2. Edit SAML integration が出てくる。 一般設定で、アプリ名を入力し、アプリケーションに表示する場合はロゴをアップロードし、ユースケースに基づいてアプリの可視性を確認し、 次へをクリックします。
  3. これにより、「Configure SAML」ページに移動します。 以下は、設定する必要がある重要な項目です。
    画像_1.png

  4. Show Advanced Settings をクリックし、ニーズに合わせて設定を選択します。
    image_2.png

  5. 属性の設定 は、ユーザー同期が必要になるまで必要ありません。 その場合、IdPからSPにユーザーをインポートするために、Liferayが必要とする属性を設定する必要があります。
    画像_3.png

  6. 残りの設定はそのままにして、 次へをクリックします。
  7. フィードバックで、オプションの2番目のチェックボックス お客様またはパートナー様ですか を選択し、 完了をクリックします。
  8. Finishをクリックすると、IdPs側(Okta)のService Provider(Liferay)設定が正常に完了します。 あとは、IdPのEntity IDとMetadataを取得して、SP側で設定する必要があります。 同じものを得るには、 Application に移動し、作成したアプリケーション(Liferay)をクリックし、Sign-On オプションに移動してください。
  9. View Setup instructions をクリックすると、メタデータがダウンロードされ、Entity ID が表示されます。
  10. Identity Provider Issuer は Entity ID で、Liferay Identity Provider の接続にアップロードするために、メタデータをコピーして metadata.xml として保存してください。 これでアプリケーションの作成は完了です。

ステップ3 - Oktaでのユーザー作成

  1. ディレクトリ > 人物 > をクリックし、 人物の追加をクリックします。
  2. 詳細を入力すると、それぞれのメールアドレスにアカウント作成のためのアクティベーションが通知されます。
  3. Activate Okta Account をクリックすると、アカウントが作成されます。 アカウントの作成に成功したら、Okta内に作成したアプリケーション(Liferay)にそれぞれのユーザーを割り当てる必要があります。
  4. 同じことを行うには、それぞれのユーザーをクリックし、 Assign Application をクリックすると、ユーザーをそれぞれのアプリケーションに割り当てることができます。

ステップ4 - Liferayの設定

  1. Liferay DXP 7.3 バンドル(バニラ)を起動します。
  2. Control Panel > Security > SAML Admin > General にアクセスし、 SAML RoleService Providerに、 Entity IDliferayspに設定する。
  3. 証明書を作成します。
  4. Service Provider タブでは、デフォルトの設定のままにしておきます。
  5. Identity Provider Connection タブで、以下を設定します。(Oktaのメタデータファイルを忘れずにアップロードしてください。)
    画像_4.png

  6. General タブに戻り、Service Providerを有効にします。
  7. ホームページにサインインポートレットを追加する(SSOが機能しない場合、管理者はSSOをバイパスしてポータルにサインインすることができます)。
  8. 新しいブラウザを開き、右上の「 Sign-In 」をクリックすると、Oktaのサインインページにリダイレクトされます。
  9. ユーザー名とパスワードを入力します。
  10. ユーザーはLiferayのホームページに戻り、自動的にサインインします。

Google OpenID Connect

ステップ1 - Liferay DXPをOAuth 2.0クライアントとしてGoogle APIに登録する

  1. https://console.developers.google.com
  2. プロジェクトが存在しない場合は、プロジェクトを作成します。
  3. https://developers.google.com/identity/protocols/oauth2/web-server#creatingcredのドキュメントを参照してください。 以下に例を示します。
    1. Create credentials > OAuth client IDをクリックします。
    2. 指定する 認可されたリダイレクト URI あなたのアプリケーションのために https://www.sp.com:8443/c/portal/login/openidconnect
    3. Googleプラットフォームが生成したOAuth認証情報(client_idとclient_secret)を取得します。

ステップ2 - Liferayの設定

  1. OpenID Connectプロバイダー接続の構成:
    1. コントロールパネル > 設定 > システム設定 > セキュリティ > SSO にアクセスし、システムスコープで OpenID Connect Provider を選択し、以下の手順を実行します。
      1. 追加ボタンをクリックしてプロバイダーを追加します。
      2. プロバイダーから受け取った情報を使って、フォームに記入してください。
        • プロバイダー名。この名前は、ユーザーがOpenID Connectを使用してログインするときに、サインインポートレットに表示されます。
        • OpenIDクライアントID。プロバイダから受け取ったOAuth 2.0クライアントIDを記入します。
        • OpenID Connect Client Secret: プロバイダから受け取ったOAuth 2.0クライアントシークレットを入力します。
        • ディスカバリーエンドポイント。残りのURLはこのエンドポイントを通じて取得される。 OpenID Connect Providerから発信されています。 例:
          https://accounts.google.com/.well-known/openid-configuration
  2. DXPでのOpenID Connect認証の有効化
    1. コントロールパネル > 設定 > システム設定 > セキュリティ > SSO にアクセスし、 OpenID Connect 仮想インスタンススコープを選択します。
    2. Enabled チェックボックスをクリックし、 Saveをクリックします。

      : コントロールパネル → 設定 → インスタンス設定 → OpenID Connect タブで、指定した仮想インスタンスの OpenID Connect 認証を有効にすることも可能です。

  3. お客様のポータルサイト(例:https://www.sp.com:8443)にアクセスします。
  4. ホームページのサインインポートレットで、 OpenID Connect のリンクをクリックします。
  5. デフォルトのGoogle OIDCがリストに入っています
  6. サインインボタンをクリックすると、Googleのサインインページが表示されます。
  7. 通常通り、認証情報を入力します
  8. ログインに成功すると、トップページに戻るはずです。

推奨されるカスタムコード

課題

  1. ゲストとしてプライベートページをリクエストすると、常にSAMLログインとなる
  2. 以前OIDCで認証されたユーザー(例えば期限切れのセッションなど)は、SAMLログインを経由します。
  3. より一般的には、/c/portal/login へのリクエストはすべて SAML を介して行われる。
  4. SAMLが有効な場合のログインポートレットのレンダリングには、いくつかの修正が必要です。

ソリューション

com.liferay.saml.runtime.servlet.profile.SamlSpIdpConnectionsProfile#isEnabled を @Component で実装します。 LoginAction (/c/portal/login) が呼ばれるたびに呼び出され、HttpServletRequestオブジェクトとともに提供されます。 これは、構成された SAML IDP 接続 (これも提供される) ごとに 1 回呼び出される。 すべての呼び出しが false を返した場合、通常のログインポータルがレンダリングされる。 SAML Adminの「Service Provider」タブでこれを有効にしている限りは。

SAMLかSAMLでないかの判断が、スタッフかスタッフでないかに基づいている場合は、これで十分かもしれない。 なぜなら、スタッフのリクエストは、既知のサブネットから来る可能性が高いからです。 あるいは、フロント・ウェブサーバーがHTTPリクエストに何らかのタグを付けることができるかもしれません(例えば、ヘッダーなど)。

ユーザごとの制御が必要な場合は、ログインポートレットで SAML ログインができるようにするのもよい方法です。 そのために com.liferay.saml.runtime.servlet.profile.SamlSpIdpConnectionsProfile#isEnabled 特別な "useSAML" (任意の名前の)HTTPリクエストパラメータが存在しないときは常にfalseを返すようにすることができました。

これにより、ログインポートレットは常にレンダリングされるようになり、OpenId Connectが行う方法と同様に、DynamicIncludeを登録して「SAML」リンクを追加することができる。 このリンクは、/c/portal/login?useSAMLにする必要があります。 クリックすると、SAML IdP へのリダイレクトが発生するか、複数の SAML IdP が利用可能な場合は、ユーザに SAML IdP の選択が提示される。

ログアウトも問題なく動作する。これは、SAML IdP からログアウトを要求する前に、アクティブな SAML SP セッションがあるかどうかを確認するためである。

did-this-article-resolve-your-issue

legacy-knowledge-base