Liferay Portal 6.2 EEでSAMLを設定する方法の手順を記録した包括的な記事です。 さらに、SAMLのさまざまな実装方法と活用方法についても解説しています。
SAML(Security Assertion Markup Language)は、 IDプロバイダ (IdP)と サービスプロバイダ (SP)の間で認証・認可データを交換するためのXMLベースのオープン標準データフォーマットです。 2001年にOASISで開発され(SAML 1.0)、2005年に規格の最新版(SAML 2.0)がリリースされた。 シングルサインオン、シングルログアウトに使用されます。 代表的な例として、GoogleとYoutubeがあります。GoogleとYoutubeのアカウントを持つユーザーは、2回目のサインオンをする必要がありません。
Liferayの観点では、SAML 2.0はEEプラグインとして提供されています。 このプラグインは、IDプロバイダーとサービスプロバイダーの2つの動作モードをサポートしています。 OpenSAMLをベースに構築されたこのプラグインは、プラットフォームに依存せず、多くのSaaSアプリケーションでサポートされています。 クレデンシャルには、Javaキーストアが使用されます。
SAMLを使用するには、2つの異なるIPアドレス、または2つの異なる仮想ホスト、または2つの異なるポートが必要です。 テスト目的でlocalhostを使用する場合、インスタンスが別々のマシンで実行されるため、異なるポート番号を設定することが許可されるため、注意してください。 インスタンスが同じJVM上にある場合、 /etc/hosts
ファイルに異なる仮想ホスト名を作成します。 以下の例では、さまざまな設定の組み合わせをイラストとして使用します。
2015年3月現在、SAML Appのメジャーリリース(Liferay Portal 6.2用2.1.0)が行われています。 追加された新機能の一覧は、 LPS-50220のリンク先をご覧ください。
Liferay Portal 6.2 EEでは、以下の表から、SAMLのさまざまな用途を実装するための具体的な情報と手順にアクセスすることができます。
目次
ユースケース1:SalesforceをSPとして連携させる |
ユースケース2:LiferayをldPとSPの両方にする場合 |
ユースケース3:電子メールアドレス以外のユーザー属性 |
よくある質問(FAQ) |
解像度
ユースケース#1:LiferayをIdPとして、SalesforceをSPとする。
SAML 2.0 Providerアプリを使用することで、Liferay Portal 6.2はSalesforceへのシングルサインオン(SSO)を実行することが可能です。 このユースケースには、以下のものが必要です:Liferay Portal 6.2 EE を Identity Provider (IdP) として設定し、admin ユーザーとは別のユーザー、および Salesforce の認証情報が必要です。
第1回 Liferay PortalをIdPとして設定するLiferayポータルをIdPとして設定する
*記入欄は下記のイメージ図と一致している必要があります。
- Liferay Portal 6.2 を起動し、最新の SAML 2.0 Provider EE プラグインを導入する。
- サインインする際、 DO NOT Remember Me チェックボックスにフラグを立てます。 そのようなことをすると、テスト全体が無効になります。
- Admin → Control Panelに移動してください。
- SAML Adminをクリックします。
- 次のように入力します:
- SAML Role (Required): Identity Provider.
- エンティティID(必須):samlidp
- [Save] をクリックします。
-
Certificate and Private Key セクションに、以下を入力します:
- 通称(必須): Liferay Support
- 所属団体(必須):Liferay
- 組織単位: (空欄のまま)
- Locality: (空欄のまま)
- State: (空欄)
- 国名: アメリカ
- 有効期限(日)(必須): 356
- 鍵のアルゴリズム: RSA
- 鍵長(ビット): 2048
- キーパスワード(必須): samlidp
- クリック 保存
- 有効 チェックボックスにチェックを入れ、 保存をクリックします。
- ダウンロード証明書をクリックします。
-
samlidp.pem
ファイルを保存します。
次に、Salesforceに対して検証するために、同じ認証情報を持つユーザーを作成します。
*注:Salesforceでは、パスワードは少なくとも8文字で数字が必要なため、この形式が必要です。
- 上部のナビゲーションバーにある「 ユーザー」 をクリックします。
- 追加をクリック → ユーザー
- 次のように入力します:
- スクリーンネーム: test1
- メールアドレス: (有効なメールアドレス)
- ファーストネーム: Liferay
- ラストネーム: サポート
- [Save] をクリックします。
- 右ペインの「 パスワード 」をクリックします。
- 次のように入力します:
- 新しいパスワード: samlidp1
- Enter Again: samlidp1
次に、このユーザーに管理者ロールを付与します。
- 右ペインの Roles をクリックします。
- Select ボタンをクリックします。
- Administratorの隣にある「Choose 」をクリックします。
- Power User の役割を削除します。
- [Save] をクリックします。
ダウンロードした sampl.pem
は、Salesforce SP に正しいメタデータ情報を提供するために必要です。 次に、SalesforceをSPとして設定する方法についてです。
- http://developer.force.comに移動します。
- 同じ有効なメールアドレスを使用して、アカウントを作成します。 これは、ユーザーアカウントとしても機能します。 Salesforceアカウントのパスワードとしてsamlidp1を使用します。
- セットアップをクリックします。
- セキュリティコントロール → シングルサインオン設定 をクリックします。
- 次のように入力します:
- 名称: samlsp
- 発行体: samlidp
-
エンティティID:
https://saml.salesforce.com
- Identity Provider Certificate: samlidp.pem ファイルをアップロードします。
-
ID プロバイダログイン URL:
http://localhost:8080/c/portal/saml/sso
-
ID プロバイダログアウト URL:
https:http://localhost:8080/c/portal/logout
- SAML Identity Type: Assertion contains User's salesforce.com username ラジオボタン をクリックします。
- SAML Identity Location: Identity is in NameIdentifier element of Subject statement ラジオボタン をクリックする。
*記入欄は、以下のイメージ図と同じです:
- [Save] をクリックします。
- Download Metadata をクリックし、XML ファイルを保存します。
- XML ファイルの名前を
salesforce-metadata.xml
と変更します。 - Salesforceからログアウトします。
次のステップで、Liferay Portal 6.2でのセットアップが完了します。
- Liferay Portal で、 Control Panel → SAML Adminに移動します。
- Service Provider Connections タブをクリックします。
- Add Service Provider ボタンをクリックします。
- 次のように入力します:
- 名称:セールスフォース
-
エンティティID:
https://saml.salesforce.com
- [Enabled]のチェックボックスをオンにします。
- Upload Metadata XMLをクリックします。
-
salesforce-meta.xml
ファイルをアップロードします。 - Name Identifier Format ドロップダウンから、 Unspecified を選択します。
-
static
: {email address used to sign up for Salesforce} に Name Identifier Attribute Name を入力(例:static:static:jane.smith@liferay.com
)。 - Attributes Enabled ボックスをチェックします。
- [Save] をクリックします。
- 新しいSalesforce SPが作成されたことを確認します。
- サインアウト]をクリックします。
- Salesforce用に作成したユーザーで再度サインインします。 フラグがサインイン時に私を記憶しないようにする。
SSO/SLOを実行する
SalesforceとのSSOを試すには、「Link to URL」タイプで特設サイトページを作成するとよいでしょう。 Liferayのデフォルトのホームページを使用することができます。
- 本サイトに移動する。
- 追加をクリック → ページ .
- ページに「Salesforce」という名前をつける
- リンク先URL ラジオボタンをクリックすると、ページタイプを変更できます。 なお、このページを最初のページとすることはできません。
-
URL の欄に次のように入力します。
http://localhost:8080/c/portal/saml/sso?entityId=https://saml.salesforce.com
ここで、localhost:8080
は、ローカルのウェブアドレスを表しています。 - ページ追加 ボタンをクリックします。
- 新しいページが作成されたことを確認する。
- Salesforceのページをクリックします。 再認証することなく、salesforce.com のサイトに直接移動できるはずです。
ユースケース#2:LiferayをIdPとSPの両方にする場合
Liferay Portal 6.2は、IdPとSPの両方として構成することができますが、この場合、2つの別々のインスタンス(つまり2つのバンドル)を同時に実行する必要があります。 ユーザーは、サーバーの設定に応じて、2つのバンドルが使用するIPアドレスかポート番号のどちらかを変更することができます。 このセクションでは、説明のために、2つのインスタンスが別々の物理的なマシンで実行されていることを想定しています。
IdPを設定するには、使用例1に記載されているのと同じ手順を使用します。 初期設定を終えた後、いくつかの追加手順があります。
- コントロールパネル → SAML Admin で、 Identity Provider タブをクリックします。
- Sign Metadata および Authn Request Signature Required のチェックボックスをオンにします。
- [Save] をクリックします。
この時点で、IdPインスタンスは準備完了となります。 以下の手順で、2つ目のポータルインスタンスをセットアップします。 (ユーザーは、どのIPアドレスが正しいインスタンスに対応しているかを覚えておく必要があります。 SAML RoleとEntity IDを除いて、多くの手順は同様である)。
- 2つ目のポータルインスタンスを起動します。
- サインインの際に、 NOT Remember Me チェックボックスにフラグを立てることを忘れないでください。 そのようなことをすると、テスト全体が無効になります。
- コントロールパネルに移動します。
- SAML Adminをクリックします。
- 次のように入力します:
- SAML 役割: サービスプロバイダー
- エンティティID(必須): samlsp
- [Save] をクリックします。
-
Certificate and Private Key セクションに、以下を入力します:
- 通称: Liferay Support
- 所属団体: Liferay
- 組織ユニット: {leave blank}
- 地域: {leave blank}
- 州: {leave blank}
- 国名: アメリカ
- 有効期限(日)(必須): 356
- 鍵のアルゴリズム: RSA
- 鍵長(ビット): 2048
- キーパスワード(必須): samlsp
- [Save] をクリックします。
このとき、SPインスタンスはIdPに接続する必要があります。 そのためには、SPがIdPのメタデータを認識する必要があります。
- Identity Provider Connection タブをクリックします。
- 次のように入力します:
- 名前(必須): samlidp
- エンティティID: samlidp
-
メタデータ URL:
http://{IdP's IP Address or virtual host name}:{port number}/c/portal/saml/metadata
(例:http://localhost:8080/c/portal/saml/metadata
)
IdPとSPは別々のIPアドレス(または
etc/hosts
ファイルで指定された仮想ホスト)であることを強調することが重要である。 - Name Identifier Format ドロップダウンメニューから、 Email Address を選択します。
- [Save] をクリックします。
- ここで、SPインスタンスを有効にします。 「一般」 タブをクリックします。
- [Enabled]のチェックボックスをオンにします。
- [Save]ボタンをクリックします。
IdPとして設定されたポータルインスタンスに戻る。
- コントロールパネル → SAML Adminに移動します。
- Service Provider Connectionsをクリックします。
- Add Service Provider ボタンをクリックします。
- 次のように入力します:
- 名称: samlsp
- エンティティID: samlsp
- [Enabled]のチェックボックスをオンにします。
- アサーションライフタイム: 1800
-
メタデータ URL:
http://{SP's host name}:{port number}/c/portal/saml/metadata
(例:http://localhost:9080/c/portal/saml/metadata
) - Name Identifier Format: Email Address (メールアドレスを使用して認証するユーザーのためのものです)。
- Name Identifier Attribute Name: emailAddress (one word)
- [Save] をクリックします。
SSOとSLOのテスト
以下の手順で、シングルサインオン(SSO)およびシングルログアウト(SLO)のデモンストレーションを行います。 IdPとSPの両方が、SSOとSLOを開始することができる。
次のセクションでは、IdPが開始するSSOとSLOについて説明します。
- IdPとして設定されているLiferay Portal Instanceに移動します。
- ブラウザのURLに、次のように入力します。
http://{IdP virtual host name}:{port number}/c/portal/saml/sso?entityId=samlsp&RelayState=http://{SP host name}:{port number}
*IdPとSPのインスタンスには、正しいIPまたはPort Numberを記述してください。
**ホスト名としては、IP アドレス、仮想ホスト名、URL が有効です。例:
http://192.168.234.119:8080
または Salesforce の例を参照してください。http://samlidp:8080/c/portal/saml/sso?entityId=samlsp&RelayState=http://samlsp:9080
- IdPからSPへのサイトリダイレクトを見る。 SPサイトは2回目のログインをすることなく、サインインすることになります。 認証は、同じ認証情報を持つ同じユーザーが 両方の インスタンスに存在する限り、機能します。
IdP が開始する SLO をテストする:
- IdP(
https://localhost:8080
)で新しいブラウザタブを開く。 - ユーザーがすでにサインインしていることを確認します。
- IdP の Sign Out をクリックし、SLO をトリガーします。
- SPのブラウザウィンドウに移動します。
- ページを更新します。 セカンドインスタンスも同様にサインアウトされていることでしょう。 Remember Me がチェックされていない限り、動作します。
以下の手順は、SP が開始した SSO と SLO を示すものです。
- SPインスタンスに移動します。
- 右上の「 Sign In 」リンクをクリックします。 NOT Sign In ポートレットを使用してください。
- ブラウザのURLでは、IdPにリダイレクトされます。
- 認証情報を入力します。
- サインイン後、SPのページに残ります。
- 新しいブラウザのタブで、IdPに移動します。 すでにサインインしているはずです。 表示されない場合は、ページを更新してください。
- SP インスタンスで、 サインアウトをクリックします。
- IdPインスタンスで、再度ページを更新します。 サインアウトもされているはずです。
このユースケースの変形として、複数のサービスプロバイダを持つことができる。 Liferay Portalの最新バージョンでは、インスタンスを追加するごとにサービスプロバイダーを設定する手順を繰り返すだけです。 現在、Liferayは1つのIdentity Providerから複数のService Providerまでしかサポートしていない。 将来のバージョンでは、複数のサービスプロバイダに対する複数のアイデンティティプロバイダをサポートする予定である。
ユースケースその3:メールアドレス以外のユーザー属性
ユーザーは、メールアドレスの他に、他の属性を使用して認証することができます。 たとえば、Salesforce の統合に関わるユースケースでは、ユーザーが Name Identifier
を Unspecified
に変更し、他の値(たとえば、 static:${salesforce-user-name}
や static:${user-email-address}
)を入力することが求められます。
また、他の属性がShibbolethと統合している例もあります。 IdPがADFSやShibbolethで、SPがLiferayというユースケースもあるようです。 ADFSの設定によっては、姓や名など他の属性を使用することができます。 Shibbolethはスクリーンネームを使って認証することができます。 SP として構成された Liferay Portal インスタンスで、Name Identifier Format を Email Address から Unspecifiedに変更します。
よくある質問(FAQ)
IdPがメタデータのダウンロードに対応していない場合はどうすればよいですか? Liferay SPは、証明書のインストール(Salesforceと同様)に対応していますか?
SAML Metadata XML を提供する必要がある。 URLまたはファイルを通して提供することができます。 IdPがSAMLメタデータをサポートしていない場合、XMLファイルを手動で作成する必要があります。
IdPとしてLiferayを使用する場合、Liferay expando
の属性値をカスタマイズしたSAMLアサーション属性値として追加することは可能ですか? SAMLアサーション属性「Customer Type」を追加し、この契約者をSPにプロビジョニングする際に、「Customer Type」属性に expando
値を割り当てることは可能でしょうか。
はい。 この方法は実行可能です。
メタデータにアクセスしようとすると、ログにNullPointerExceptionが発生し、ページでエラーが発生します。
解決方法については、 SAML Plugin Throws NPE When Trying to Access Metadataを参照してください。
ユーザーが間違ったログアウトページにリダイレクトされる。
ポータルの設定で「デフォルトのログアウトページ」がすでに設定されている可能性があります。 コントロールパネル → ポータル設定 を開き、 Default Logout Page フィールドに値が存在しないことを確認します。
セッションタイムアウト、アサーションライフタイムとは何ですか? どう違うのでしょうか?
セッションタイムアウトとは、SAML IdP が SP に接続された状態を維持する時間のことである。 Liferay Portal のコンテキストでは、SAML セッションのタイムアウトがポータルのタイムアウトよりも 短い であることを確認します。そうしないと SLO は機能しません。 ユーザーの非アクティブによりセッションが終了した場合、ユーザーは再認証を行う必要があります。
アサーションライフタイムとは、IdPとSP間のアサーションが有効である期間を指す。 アサーションは、サーバーの時刻がずれていると、期限切れなどで認識されないことがあります。 通常、秒単位で表示されます。 これを解決するには、クロックスキュー機能を適宜調整します。
SAMLメタデータファイルやSAMLメタデータURLを使用する論理は何ですか?
SAML 2.0 Provider EE プラグインは、SAML IdP メタデータ・ファイルへの URL または実際の(アップロードされた)SAML メタデータ XML ファイルのいずれかを使用できます。 Metadata URL フィールドに入力された値は、入力されたメタデータ URL が 1 つで、指定されたメタデータ XML ファイルがない場合にのみ、データベースに永続化されます。 そうでない場合は、ポータルはデータベースにオリジナルのメタデータURLを保持します。 この動作により、一度メタデータURLを指定すると、常にデータベースにメタデータURLが保存されるようになります。 これにより、ポータル管理者が以前に入力したメタデータURLやそのフォーマットを忘れてしまった場合でも、表示されたメタデータURLを見るだけで、表示されたメタデータURLを修正するか、メタデータXMLファイルを指定して以前に保存したメタデータURLを上書きするかを選択できます。
現在、SAML 2.0 Provider EE プラグインは、コントロールパネル UI を使用して SAML IdP メタデータ URL またはメタデータ XML ファイルのフィールドを「クリア」する方法を提供しません。 これらのフィールドを本当にクリアする必要がある場合は、Liferay ポータルのデータベースの SamlSpIdpConnection
テーブルの SAML IdP メタデータ URL とメタデータ XML ファイルの列の内容を削除することも可能です(ただし推奨しません)。 (コントロールパネルのUIでSAML IdPメタデータのURLやメタデータXMLファイルのフィールドを「クリア」する方法は、機能として要望されています)。 問題の進捗状況はこちらで確認できます: LPS-59199.
SalesforceにSSOした際に、自動的にユーザーをプロビジョニングするためには、どのような変更が必要ですか? 以下のリンクからSalesforceの設定は済んでいます: https://login.salesforce.com/help/doc/en/sso_saml.htm
現時点では、参考となるコンフィギュレーションを用意していません。 自動プロビジョニングのテストは、Liferay SAML SP経由でしか行われていない。
Liferay SAML SPでプロビジョニングする場合は、以下の行を追加してください:
saml.idp.metadata.attributes.enabled[liferaysamlspdemo]=true saml.idp.metadata.attribute.names[liferaysamlspdemo]=screenName,firstName,lastName,emailAddress,uuid
liferaysamlspdemo
は、SPのエンティティIDです。
追加情報
- Liferayユーザーをエンタープライズ (Portal 6.1)に統合する。
- 既存ユーザーをLiferay に統合する(Portal 6.2)