2.2. IDP と SP の設定と設定
ここでは、アプリケーションを SP または IDP のいずれかになるように設定する方法と、それらのアプリケーションをホストする JBoss EAP インスタンスをセットアップする方法について説明します。
2.2.1. IDP の設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを IDP として動作するように設定するには、以下の手順を実行する必要があります。
アプリケーションを作成およびデプロイする前に、セキュリティードメインを作成および設定する必要があります。
IDP のセキュリティードメインを作成します。
IDP はクレデンシャルのプリンシパルを処理し、そのプリンシパルの認証および承認を処理し、その結果に基づいて適切な SAML v2 セキュリティーアサーションを発行します。これには、セキュリティードメインを使用してアイデンティティーストアを設定する必要があります。このセキュリティードメインおよびアイデンティティーストアを作成する唯一の要件は、認証および承認メカニズムが適切に定義されていることです。これは、プロパティーファイル、データベース、LDAP など、さまざまな ID ストアと関連のログインモジュールを使用して IDP アプリケーションをサポートすることができることを意味します。セキュリティードメインの詳細は、JBoss EAP Security Architecture ガイドの Security Domains を参照してください。
以下の例では、プロパティーファイルを使用して簡単な
UsersRolesログインモジュールを使用します。セキュリティードメインを作成する管理 CLI コマンド
/subsystem=security/security-domain=idp:add(cache-type=default) /subsystem=security/security-domain=idp/authentication=classic:add /subsystem=security/security-domain=idp/authentication=classic/login-module=UsersRoles:add(code=UsersRoles,flag=required,module-options=[usersProperties=${jboss.server.config.dir}/idp-users.properties,rolesProperties=${jboss.server.config.dir}/idp-roles.properties]) reloadUsersRolesログインモジュールは、プロパティーファイルを使用して、ユーザー/パスワードとユーザー/ロール情報を保存します。UsersRolesモジュールの詳細は、JBoss EAP Login Module Reference を参照してください。この例では、プロパティーファイルには以下が含まれます。idp-users.properties
Eric=samplePass Alan=samplePassidp-roles.properties
Eric=All Alan=IDP の
web.xmlファイルを設定します。IDP の
web.xmlファイルには以下が含まれている必要があります。-
セキュアな領域の URL パターンにマップする
<url-pattern>が含まれる<web-resource-collection>を持つ<security-constraint>。任意で、<security-constraint>に許可されるロールを明記する<auth-constraint>を含めることもできます。 -
FORM認証用に設定された<login-config>。 -
<auth-constraint>にロールが指定されている場合、これらのロールを<security-role>で定義する必要があります。 - 必要に応じて、イメージやスタイルなどのログインフォームで使用されるリソースは、追加のセキュリティー制約で、認証前にアクセスできるように、セキュアでない追加のセキュリティー制約で指定できます (例: ログインページ)。
<security-constraint>および<security-role>要素を使用すると、管理者は URL パターンおよびロールを基に制限された領域または無制限の領域をセットアップできます。これにより、リソースをセキュリティーで保護することができ、保護しないこともできます。<login-config>タグは、ユーザーの認証時に IDP が使用するログインおよびエラーページを定義します。例:
web.xmlファイル<web-app> <display-name>IDP</display-name> <description>IDP</description> <!-- Define a security constraint that gives unlimited access to images --> <security-constraint> <web-resource-collection> <web-resource-name>Images</web-resource-name> <url-pattern>/images/*</url-pattern> </web-resource-collection> </security-constraint> <!-- Define a security constraint that requires the All role to access resources --> <security-constraint> <web-resource-collection> <web-resource-name>IDP</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>All</role-name> </auth-constraint> </security-constraint> <!-- Define the Login Configuration for this Application --> <login-config> <auth-method>FORM</auth-method> <realm-name>IDP Application</realm-name> <form-login-config> <form-login-page>/jsp/login.jsp</form-login-page> <form-error-page>/jsp/error.jsp</form-error-page> </form-login-config> </login-config> <!-- Security roles referenced by this web application --> <security-role> <description>The role that is required to log in to the IDP Application</description> <role-name>All</role-name> </security-role> </web-app>注記Welcome ページはアプリケーション内で定義することが推奨されます。デフォルトでは、JBoss EAP は
index.jspという名前のファイルを検索しますが、web.xmlで<ogg-file-list>を使用してこれを設定できます。例:
login.jspファイル<html> <head></head> <body> <form id="login_form" name="login_form" method="post" action="j_security_check" enctype="application/x-www-form-urlencoded"> <center> <p>Welcome to the <b>IDP</b></p> <p>Please login to proceed.</p> </center> <div style="margin-left: 15px;"> <p> <label for="username">Username</label> <br /> <input id="username" type="text" name="j_username"/> </p> <p> <label for="password">Password</label> <br /> <input id="password" type="password" name="j_password" value=""/> </p> <center> <input id="submit" type="submit" name="submit" value="Login"/> </center> </div> </form> </body> </html>例:
error.jspファイル<html> <head></head> <body> <p>Login failed, please go back and try again.</p> </body> </html>-
セキュアな領域の URL パターンにマップする
IDP の認証システムを設定します。
この認証システムは、ユーザーの認証と SAML v2 セキュリティーアサーションを発行および検証します。オーセンティケーターの一部は、プリンシパルの認証および承認に使用するセキュリティードメインを定義することで
jboss-web.xmlファイルに設定されます (手順 1 を参照)。また、<login-config>がweb.xmlで指定され、必要な依存関係が宣言されるようにする必要があります。jboss-web.xmlファイルには以下が必要です。-
認証または承認に使用されるセキュリティードメインを指定する
<security-domain>。
例:
jboss-web.xmlファイル<jboss-web> <security-domain>idp</security-domain> <context-root>identity</context-root> </jboss-web>-
認証または承認に使用されるセキュリティードメインを指定する
IDP に必要な依存関係を宣言します。
IDP として機能する web アプリケーションは、
org.picketlinkクラスを見つけることができるように依存関係をjboss-deployment-structure.xmlに定義する必要があります。JBoss EAP は必要なすべてのorg.picketlinkと関連クラスを提供し、アプリケーションはそれらを依存関係として宣言して使用することのみが必要になります。jboss-deployment-structure.xml を使用した依存関係の宣言
<jboss-deployment-structure> <deployment> <dependencies> <module name="org.picketlink" services="import"/> </dependencies> </deployment> </jboss-deployment-structure>注記これまでのバージョンの JBoss EAP では、同じ依存関係を宣言していましたが、SAML 認証システムをインストールするためのバルブが宣言されていました。JBoss EAP 7 で Undertow が導入され、
services="import"を使用して SAML 認証システムをインストールするようになりました。IDP の
picketlink.xmlファイルを作成および設定します。picketlink.xmlファイルは authenticator の動作を管理し、アプリケーションの起動時にロードされます。ファイルには、少なくとも以下の要素が含まれている必要があります。
-
<IdentityURL>を使用した IDP の URL と、IDP で信頼されるホストを定義する<PicketLinkIDP>。 -
SAML リクエストおよび応答の処理に必要なハンドラーのセットを定義する
<Handlers>。
picketlink.xml ファイルの例
<PicketLink xmlns="urn:picketlink:identity-federation:config:2.1"> <PicketLinkIDP xmlns="urn:picketlink:identity-federation:config:2.1"> <IdentityURL>${idp.url::http://localhost:8080/identity/}</IdentityURL> <Trust> <Domains>localhost,example.com</Domains> </Trust> </PicketLinkIDP> <Handlers xmlns="urn:picketlink:identity-federation:handler:config:2.1"> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.SAML2IssuerTrustHandler" /> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.SAML2LogOutHandler" /> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.SAML2AuthenticationHandler" /> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.RolesGenerationHandler" /> </Handlers> </PicketLink>警告ハンドラーは、Chain of Responsibility を使用して実装されます。各ハンドラーは、
picketlink.xmlで定義された順序で要求および応答でロジックを実行します。ハンドラーが設定される順序に注意することが非常に重要です。デフォルトでは、
picketlink.xmlは IDP web アプリケーションのWEB-INFディレクトリーにあります。ただし、アプリケーション外のpicketlink.xmlへのカスタムパスを設定できます。これは、複数の JBoss EAP インスタンス間で複数のアプリケーションが同じpicketlink.xml設定を共有している場合に便利です。-
オプション:
picketlink.xmlのカスタムの場所の設定CONFIG_FILEパラメーターを使用してpicketlink.xmlのカスタムの場所を指定できます。これは、web.xmlに<context-param>要素を追加して行います。CONFIG_FILEパラメーターの使用<context-param> <param-name>CONFIG_FILE</param-name> <param-value>/path/to/picketlink.xml</param-value> </context-param>org.picketlink.federation.saml.CONFIG_PROVIDERパラメーターを使用してカスタム設定プロバイダーを指定することもできます。これにより、org.picketlink.identity.federation.web.util.SAMLConfigurationProviderを拡張するカスタム実装を作成して、独自の設定ロジックを提供することができます。org.picketlink.federation.saml.CONFIG_PROVIDERパラメーターの使用<context-param> <param-name>org.picketlink.federation.saml.CONFIG_PROVIDER</param-name> <param-value>MyConfigurationProvider</param-value> </context-param>注記ここで使用する管理 CLI コマンドは、JBoss EAP スタンドアロンサーバーを実行していることを仮定しています。JBoss EAP 管理対象ドメインの管理 CLI を使用する場合の詳細は JBoss EAP Management CLI Guide を参照してください。