Liferay Supportは、特定のサードパーティ製品を他の製品よりも推奨または承認するものではありません。 Liferayは、これらの製品に関して、ここに記載または参照されているいかなる指示に対しても責任を負いません。 これらの原則の実行は、加入者の責任において行われるものとします。
この記事では、SAMLサービスプロバイダー(SP)としてDXPインスタンスを設定し、アイデンティティプロバイダー(IdP)としてMicrosoft Active Directory Federated Service(ADFS)に接続する概念実証を説明します。 この実装により、ユーザーはLiferay DXPからシングルサインオン(SSO)アクションを実行することができます。
この記事は、一般的なチェックリストと概念実装の証明です。 管理者は、このプロセスを開始する前に、必ずADFSに関するサードパーティのドキュメントを参照する必要があります。
解決策
デモのため、アプリケーションサーバーとしてApache Tomcatを使用しました。いくつかの手順はTomcat 8.0または9.0用ですが、他のアプリケーションサーバーにも適用可能です。
チェックリスト
- ADFSの設定を確認する
- エイリアスの作成
- HTTPS を有効にする
- DXP 7.xをSPとして構成する。
- ADFSへのRelying Partyトラストの追加
- SAMLレスポンスへの署名の作成
- サービスプロバイダーからSSOを実行する
ADFSの設定を確認する
- ADFSが正しく初期設定されていることを確認します。
- すべてのユーザーとその資格情報がADFSサーバーに作成またはインポートされていることを確認します。 SSO/SLO は ADFS と SP として機能する Liferay インスタンス間のユーザーと資格情報の照合に依存するため、これは非常に重要です。
- すべてのユーザーがアクティブであることを確認する。
- federation-metadata.xmlまたはURLのいずれかを取得する。 これをDXP 7.xに取り込む必要があります。
エイリアスの作成
ベストプラクティスとして、IPアドレスをエイリアスとして使用できないことを発見しました。 むしろ、 hosts
ファイルでエイリアスを作成するか、一般的なホスト名を再利用する必要がありました:
{IP address}
| {domain name}
例: 192.168.84.139 | liferay-bdba6af.testdom.local
HTTPS を有効にする
アプリケーションサーバーで HTTPS を有効にする必要があります。
- Java
.keystore
を生成し、フォルダに入れる。 -
${tomcat_home}/conf/server.xml
ファイルに移動します。 - 入力
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="[keystore_dir]/.keystore" keystorePass="[key_password]" />
ここで、{keystore_dir}
は、キーストアがあるフォルダ(例えば、C:/users/liferay/documents
) を指し、keystorePass="[key_password]"は、キーストアのパスワードを指します。
- セキュアポートを*443に誘導できるようにする。 Tomcatの場合は通常8443、WebSphereの場合は通常9443です。 入力
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" URIEncoding="UTF-8" />
DXP 7.xをSPとして構成する。
SAML Service Provider として Liferay DXP を設定する際の管理者をガイドするドキュメントが既に存在します。 もちろん、最初に適切な SAML Connector を DXP インスタンスに配備することを忘れないでください。
Liferay DXPとADFSの連携に関しては、いくつか注意すべき点があります:
- SAML SP メタデータを生成する際に、HTTPS が使用されていることを確認する (
https://liferay-bdba6af.testdom.local/c/portal/saml/metadata
) 。 - サインイン時に Remember Me チェックボックスをチェックすることはありません。 これにより、すべてのSSO/SLOが否定される。
-
Service Provider タブで、以下の設定を有効にする必要があります:
- アサーション署名が必要
- SSLを必須にする
- LDAPインポートを有効にする
-
Identity Provider タブで、以下を入力します。
- 名称: ADFS
- エンティティID: https://[ADFS server name]/FederationMetadata/2007-06/FederationMetadata.xml
- メタデータURL: https://[ADFS サーバ名]/FederationMetadata/2007-06/FederationMetadata.xml(注:メタデータURLを使用すると、IdP変更後にSPが更新したメタデータを受け取ることができ、中断のない統合が可能です)。
- 名称 識別子 形式: 不特定多数
-
属性マッピング:
saml.sp.user.attribute.mappings=\http\\://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress=emailAddress\n\http\\://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname=firstName\n\http\\://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname=lastName\n\http\\://schemas.xmlsoap.org/claims/CommonName=screenName
チェックポイント:
- ADFSが稼働しています。
- エイリアスが作成されました。
- アプリケーションサーバーでHTTPSが有効になっています。
- DXP 7.0 または 7.1 インスタンスが実行されており、SAML Connector が配備されている。
- DXP 7.xのインスタンスはSPとして構成されています。
ADFSにRelying Party Trustを追加する。
おそらく、SPのメタデータをADFSにインポートする最も重要なステップである。 CRルールとTRルールがあり、信頼関係やLDAPマッピングを指示する。
CRルール
LDAP Attribute | 発信型クレームタイプ |
SAM-Account-Name | 共通名 |
E-Mail-Address | E-mailアドレス |
Given-Name | ジブンネーム |
Surname | Surname |
TRルール
TR Ruleを作成する場合は、次のように入力します:
- Claim Rule: {whatever}
- ルールテンプレート: 着信したクレームを変換する。
- 着信クレームタイプ: コモンネーム
- 発信型クレームタイプ: 名前ID
- 発信名IDフォーマット: 不特定多数
- すべてのクレーム値を通過させる
SAMLレスポンスへの署名の作成
ADFSからLiferayへのリクエストは署名が必要です。
SamlResponseSignature MessageAndAssertion
は、Relying Party Trust に追加されなければならない。 そうすれば、DXP SPインスタンスは、署名付きメッセージとアサーションの両方を有効な応答として受け入れることができる。
SPからSSOを実行する
ADFSとLiferay DXPがアクティブになったら、SPが開始するSSOを使用して、それらが確かに接続されていることを確認することができます。 DXPインスタンスで、「サインイン」リンクをクリックします。 これはADFSにリダイレクトされるはずです。