Liberty でのアウトバウンド SPNEGO トークンの Kerberos 制約付き委任の構成

アウトバウンド SPNEGO トークンに対して Kerberos 制約付き委任をサポートするように Liberty サーバーを構成できます。

始めに

SPNEGO Web 認証を構成済みであることを確認してください。

IBM® SDK 1.8 以降がサポートされています。 Oracle JDK および OpenJDK は、 Libertyでサポートされているのと同じレベルでサポートされます。

このタスクについて

S4U (Services for Users) という名前の Kerberos v5 拡張機能は制約付き委任とも呼ばれ、次の 2 つのパートからなります。
S4U2self

Liberty サーバーがユーザーの代わりにそれ自体へのサービス・チケットを取得できるようにします。 これは、 Libertyでサポートされる任意の形式の認証で使用できます。 S4U2self は、「Kerberos プロトコル遷移」拡張機能です。

S4U2proxy

Liberty サーバーがユーザーの代わりにトラステッド・サービスへのサービス・チケットを取得できるようにします。 これらのサービス・チケットは、 Liberty サービスへのユーザーのサービス・チケットを使用して取得されます。 サービスは、Kerberos 鍵配布センター (KDC) 管理者によって制約されます。 S4U2proxy は、「Kerberos 制約付き委任」拡張機能です。

制約付き委任フィーチャーは、.NET サーバーやその他の Liberty サーバーなど、SPNEGO 認証をサポートするバックエンド・サービス用のアウトバウンド SPNEGO トークンを作成するために、以下の API を提供します。
  • S4U2self API: com.ibm.websphere.security.s4u2proxy.SpnegoHelper.buildS4U2proxyAuthorizationUsingS4U2self()
  • S4U2proxy API: com.ibm.websphere.security.s4u2proxy.SpnegoHelper.buildS4U2proxyAuthorization()

以下のステップでは、 Liberty での SPNEGO 認証の構成 で使用され、 SPNEGO Web 認証を使用した HTTP 要求のシングル・サインオンで説明されているのと同じシステム・セットアップ例を使用します。

手順

  1. Microsoft ドメイン・コントローラー myAdMachine.example.comで、着信 SPNEGO トークンの検証に使用するサービス・プリンシパル名 (SPN) を更新します。 例えば、 HTTP/myLibertyMachine.example.com SPN を以下のように更新します。
    1. S4U2selfを使用するには、以下のステップを実行します。
      1. 委任 SPN にマップされたユーザー・アカウントを開きます。
      2. 「属性エディター」タブを開きます。
      3. userAccountControl プロパティーを次のように変更します。
        • 認証委任の信頼性 0x1000000, or the TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION enum) は true でなければなりません。
      4. トラステッド・サービスを設定します。
        • ユーザー・アカウントの「委任」タブを開きます。
        • 「指定されたサービスへの委任でのみこのユーザーを信頼する」を選択します。
        • 「任意の認証プロトコルを使う」を選択します。
        • トラステッド・サービスを追加するため、「追加」をクリックします。
        • 「ユーザーまたはコンピューター」をクリックします。
        • トラステッド・サービスに使用する SPN を入力します。
        • 「名前の確認」をクリックし、適切なオブジェクト名が検出されたことを検証します。
        • OK」をクリックします。
        • 「SPN を指定 (SPN specified)」 を選択し、 「OK」をクリックします。
    2. S4U2proxyを使用するには、以下のステップを実行します。
      1. 委任 SPN にマップされたユーザー・アカウントを開きます。
      2. 「属性エディター」タブを開きます。
      3. userAccountControl プロパティーを次のように変更します。
        • 認証委任の信頼性 (0x1000000, or the TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION enum) は true でなければなりません。
      4. トラステッド・サービスを設定します。
        • ユーザー・アカウントの「委任」タブを開きます。
        • 「指定されたサービスへの委任でのみこのユーザーを信頼する」ラジオ・ボタンを選択します。
        • トラステッド・サービスを追加するため、「追加」をクリックします。
        • 「ユーザーまたはコンピューター」をクリックします。
        • トラステッド・サービスに使用する SPN を入力します。
        • 「名前の確認」をクリックし、適切なオブジェクト名が検出されたことを検証します。
        • OK」をクリックします。
        • 「SPN を指定 (SPN specified)」 を選択し、 「OK」をクリックします。
  2. Liberty サーバー・マシン (myLibertyMachine.example.com) で、 constrianedDelegation-1.0featureManager に追加することによって制約付き委任フィーチャーを使用可能にし、 IBM JDK 1.8の場合は、 server.xml ファイルで JAAS Kerberos ログイン・モジュールを構成します。

    featureManager エレメントの以下の例は、IBM JDK、Oracle JDK、および OpenJDK に適用されます。

    
    <featureManager>
            <feature>spnego-1.0</feature>
            <feature>constrainedDelegation-1.0</feature>
            ...
    </featuremanager>
    

    JAAS Kerberos ログイン・モジュールの以下の例は、IBM JDK 1.8 に適用されます。

    
    <jaasLoginContextEntry id="com.ibm.security.jgss.krb5.accept" name="com.ibm.security.jgss.krb5.accept" loginModuleRef="useKeytab" />
    	 <jaasLoginModule id="useKeytab" className="com.ibm.security.auth.module.Krb5LoginModule" controlFlag="REQUIRED" libraryRef="jaasSharedLib">
                    <options 
                            credsType="both"
                            debug="true" 
                            useDefaultCcache="false"
                            tryFirstPass="true"
                            forwardable ="true"                    
                            principal="HTTP/myLibertyMachine.example.com"
                            useKeytab="${server.config.dir}/resources/security/kerberos/krb5.keytab">
                    </options>		 		 		 		  
            </jaasLoginModule>
    
    
    <library id="jaasSharedLib" apiTypeVisibility="spec, ibm-api, stable, api">
          <fileset dir="${server.config.dir}/lib/global/" includes="*" />
    </library>
    JAAS Kerberos ログイン・モジュールの以下の例は、IBM JDK バージョン 1.8 より後、OpenJDK、および Oracle JDK に適用されます。
    
    <jaasLoginContextEntry id="com.sun.security.auth.module.Krb5LoginModule" name="com.sun.security.auth.module.Krb5LoginModule" loginModuleRef="com.sun.security.auth.module.Krb5LoginModule" />
    	
    <jaasLoginModule id="com.sun.security.auth.module.Krb5LoginModule" className="com.sun.security.auth.module.Krb5LoginModule" controlFlag="REQUIRED" libraryRef="jaasSharedLib">
        	<options useKeyTab="true" 
        			 refreshKrb5Config="true" 
        			 doNotPrompt="true" 
        			 storeKey="true"  
        			 isInitiator="false"
        			 debug="true"
        			 keyTab="${server.config.dir}/resources/security/kerberos/krb5.keytab" />
        </jaasLoginModule>
    	
    	<library id="jaasSharedLib" apiTypeVisibility="spec, ibm-api, api">
    		<fileset dir="${server.config.dir}/lib/global/" includes="*" />
    	</library>
    constrainedDelegation-1.0 フィーチャーが有効になっていると、以下の構成が暗黙指定されます。
    
    <constrainedDelegation id="defaultConstrainedDelegation" s4U2selfEnabled="false" />
    S4U2self を使用するには、 server.xml ファイルに以下の構成が必要です。
    
    <constrainedDelegation s4U2selfEnabled = "true" id="defaultConstrainedDelegation"/>
    注: S4U2proxy API を使用する場合、 jaasLoginContextEntry id および name com.ibm.security.jgss.krb5.accept は変更できません。
    注: デフォルトでは、 S4U2proxy は有効になっており、 S4U2self は無効になっています。 S4U2self 拡張は、 server.xml ファイル内の s4U2selfEnabled 属性を変更することによって有効または無効にすることができます。

結果

アプリケーションは制約付き委任フィーチャーによって提供される API を呼び出す準備ができました。