2.7. Kerberos 認証を使用するようにアイデンティティープロバイダーを設定する

IDP は他の ID ストアの他に、Kerberos を認証メカニズムとして使用することもできます。Kerberos を使用するように IDP を設定するには、以下を行う必要があります。

注記

作業用の Kerberos 環境があることを前提とします。

  1. Kerberos 認証のセキュリティードメインを設定します。

    以下のコマンドを使用して、IDP で必要なセキュリティードメインを設定できます。詳細は、Kerberos による SSO のセットアップ方法 ガイドの JBoss EAP レガシーセキュリティーサブシステム設定 セクションを参照してください。

    /subsystem=security/security-domain=host:add(cache-type=default)
    
    /subsystem=security/security-domain=host/authentication=classic:add
    
    /subsystem=security/security-domain=host/authentication=classic/login-module=Kerberos:add(code=Kerberos, flag=required, module-options=[debug=false, storeKey=true, refreshKrb5Config=true, useKeyTab=true, doNotPrompt=true, keyTab=/home/username/service.keytab, principal=host/SERVER_NAME@REALM_NAME])
    
    /subsystem=security/security-domain=app-spnego:add(cache-type=default)
    
    /subsystem=security/security-domain=app-spnego/authentication=classic:add
    
    /subsystem=security/security-domain=app-spnego/authentication=classic/login-module=SPNEGO:add(code=SPNEGO, flag=required, module-options=[serverSecurityDomain=host])
    重要

    関連するシステムプロパティー がすべて有効にされていることも確認する必要があります。

    ログインモジュールの詳細は、JBoss EAP ログインモジュールのリファレンスKerberos ログインモジュール および SPNEGO ログインモジュール を参照してください。

  2. SP のセキュリティードメインを設定します。

    以下のコマンドを使用して、SP が必要とするセキュリティードメインを設定できます。詳細は、SP の設定 を参照してください。

    /subsystem=security/security-domain=sp:add(cache-type=default)
    
    /subsystem=security/security-domain=sp/authentication=classic:add
    
    /subsystem=security/security-domain=sp/authentication=classic/login-module=org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule:add(code=org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule,flag=required)
  3. 変更を反映するためにサーバーをリロードします。

    reload
  4. 上記の手順を完了すると、以下の設定が作成されます。

    例: IDP および SP のセキュリティードメイン

    <security-domain name="host" cache-type="default">
      <authentication>
        <login-module code="Kerberos" flag="required">
          <module-option name="debug" value="false"/>
          <module-option name="storeKey" value="true"/>
          <module-option name="refreshKrb5Config" value="true"/>
          <module-option name="useKeyTab" value="true"/>
          <module-option name="doNotPrompt" value="true"/>
          <module-option name="keyTab" value="/home/username/service.keytab"/>
          <module-option name="principal" value="HTTP/testserver@MY_REALM"/>
        </login-module>
      </authentication>
    </security-domain>
    <security-domain name="app-spnego" cache-type="default">
        <authentication>
            <login-module code="SPNEGO" flag="required">
                <module-option name="serverSecurityDomain" value="host"/>
            </login-module>
        </authentication>
        <mapping>
        ...
        </mapping>
    </security-domain>
    <security-domain name="sp" cache-type="default">
        <authentication>
            <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="required"/>
        </authentication>
    </security-domain>

  5. IDP アプリケーションを設定します。

    IDP 設定のプロセスは、IDP の設定 セクションで説明されているものと同じですが、以下の変更があります。

    • JBoss Negotiation の追加の依存関係の宣言
    • SPNEGO ログインモジュールでセキュリティードメインを使用するよう IDP アプリケーションを設定します。

      注記

      IDP の設定時に、設定で PicketLinkSTS 要素を指定する必要はありません。OMMITED PicketLink の場合は、picketlink-core-VERSION.jar 内の core-sts という名前のファイルからデフォルト設定を読み込みます。

      この設定は、必要な場合にのみ上書きします。たとえば、トークンのタイムアウトを変更したり、SAML アサーションのカスタムセキュリティートークンプロバイダーを指定したりします。

      例: Kerberos および picketlink 依存関係を含む jboss-deployment-structure.xml

      <jboss-deployment-structure>
        <deployment>
          <dependencies>
            <module name="org.picketlink" services="import"/>
            <module name="org.jboss.security.negotiation"/>
          </dependencies>
        </deployment>
      </jboss-deployment-structure>

      例: IDP の jboss-web.xml

      <jboss-web>
        <security-domain>app-spnego</security-domain>
        <context-root>identity</context-root>
      </jboss-web>

      例: PicketLinkSTS 要素を含む 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/idp/}</IdentityURL>
          <Trust>
           <Domains>redhat.com,localhost,amazonaws.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>
        <!-- The configuration bellow defines a token timeout and a clock skew. Both  configurations will be used during the SAML Assertion creation. This configuration is optional. It is defined only to show you how to set the token timeout and clock skew configuration.   -->
        <PicketLinkSTS xmlns="urn:picketlink:identity-federation:config:1.0" TokenTimeout="5000" ClockSkew="0">
          <TokenProviders>
          <TokenProvider
             ProviderClass="org.picketlink.identity.federation.core.saml.v1.providers.SAML11AssertionTokenProvider"
             TokenType="urn:oasis:names:tc:SAML:1.0:assertion"
             TokenElement="Assertion" TokenElementNS="urn:oasis:names:tc:SAML:1.0:assertion" />
          <TokenProvider
             ProviderClass="org.picketlink.identity.federation.core.saml.v2.providers.SAML20AssertionTokenProvider"
             TokenType="urn:oasis:names:tc:SAML:2.0:assertion"
             TokenElement="Assertion" TokenElementNS="urn:oasis:names:tc:SAML:2.0:assertion" />
          </TokenProviders>
        </PicketLinkSTS>
      </PicketLink>

      重要

      IDP の web.xml で設定されたロールが Kerberos 環境に設定されたロールと一致することを確認する必要があります。そのためには、IDP のセキュリティードメインで別のログインモジュールを設定し、適切なロールを SPNEGO 認証の後にマップするか、IDP のセキュリティードメインでマッピングプロバイダーを使用します。