スタックされた JAAS ログイン・モジュールを使用した動的 Kerberos トークンの生成

WSSAPI を使用する場合は、ユーザー名とパスワードを Kerberos トークン生成プログラム KRBGenerateLoginModule に動的に渡すことができます。 ただし、ポリシー・セットとバインディングを使用する必要がある場合、標準構成ではユーザー名とパスワードを Kerberos トークン生成プログラムに動的に渡すことはできません。これは、コールバック・ハンドラーと、コールバック・ハンドラー内のユーザー名およびパスワードがいずれも固定値であるためです。カスタム JAAS ログイン・モジュールを使用している場合、ポリシー・セットとバインディングを使用して、動的 Kerberos トークンを作成できます。

始める前に

カスタム JAAS ログイン・モジュールを作成するか、クライアントの要求コンテキストに UsernameToken を追加する場合、Kerberos トークン生成プログラムが Kerberos チケットを要求する際に使用するユーザー名とパスワードをカスタマイズできます。

このタスクについて

GenericSecurityTokenFactory は、Kerberos チケットの要求時に使用するユーザー名とパスワードをカスタマイズする際に KRBGenerateLoginModule で使用可能なトークンを作成するためにユーザーが使用できる SPI を提供します。

以下の手順では、スタックされた JAAS ログイン・モジュール・メソッドを使用して、KRBGenerateLoginModule で Kerberos トークンを作成する際に使用するユーザー名とパスワードをカスタマイズする方法を示します。この手順で作成される UsernameToken をクライアントの要求コンテキストに配置することで、同じ結果を実現できます。動的 Kerberos トークンは、ユーザーが作成する UsernameToken からのみ作成可能です。Kerberos チケットから動的 Kerberos トークンを作成することはできません。クライアントの要求コンテキストにトークンを配置する方法について詳しくは、com.ibm.wsspi.wssecurity.core.Constants にある以下の定数を参照してください。

  • com.ibm.wsspi.wssecurity.token.tokenHolder
  • com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext

手順

  1. カスタム JAAS ログイン・モジュールを作成します。
    package test.tokens;
    
    import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
    import java.util.Map;
    
    import javax.security.auth.Subject;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.login.LoginException;
    import javax.security.auth.spi.LoginModule;
    import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
    
    
    public class MyKrbCustomLoginModule implements LoginModule {
      //For the sake of readability, this login module does not
      //protect against all NPE's
    
      private Map _sharedState;
      private Map _options;
      private CallbackHandler _handler;
    
      	public void initialize(Subject subject, CallbackHandler callbackHandler, 
                  Map<String, ?> sharedState, Map<String, ?> options) {
    
        this._handler = callbackHandler;
        this._sharedState = sharedState;
        this._options = options;  
      }
    
      public boolean login() throws LoginException {
    
        GenericSecurityTokenFactory factory = null;
        try {
          factory = GenericSecurityTokenFactory.getInstance();
        } catch (Exception e) {
          throw new LoginException(e.toString());
        }
    
        UsernameToken unt = factory.getSimpleUsernameToken("username", "password".toCharArray());
    
        factory.putGeneratorTokenToSharedState(this._sharedState, unt);
    
        return true;
      }
      //implement the rest of the methods required by the
      //LoginModule interface
    }
  2. 新規 JAAS ログイン構成を作成します。
    1. 管理コンソールで、「セキュリティー」->「グローバル・セキュリティー」を選択します。
    2. 「認証」の下で、「Java 認証・承認サービス」を選択します。
    3. 「システム・ログイン」を選択します。
    4. 最初に、カスタム・モジュールを使用してジェネレーターを作成します。
      1. 「新規」をクリックし、Alias = test.generate.krb を指定します。
      2. 「新規」をクリックし、Module class name = test.tokens.MyKrbCustomLoginModule と指定します。
      3. 「ログイン・モジュール・プロキシーを使用」を選択します。
      4. 「OK」をクリックします。
      5. 「新規」をクリックし、Module class name = com.ibm.ws.wssecurity.wssapi.token.impl.KRBGenerateLoginModule を選択します。
      6. 「新規」をクリックし、Module class name = com.ibm.ws.wssecurity.wssapi.token.impl.DKTGenerateLoginModule を選択します。
      7. 「OK」をクリックします。
      8. JAAS - システム・ログイン」をクリックします。
  3. 新しい JAAS 構成を使用するよう Kerberos トークン生成プログラムを構成します。
    1. 変更するバインディング構成を開きます。

      管理コンソールで、「WS-Security」 >「認証と保護」を選択します。

    2. 認証トークンの下で、変更する Kerberos アウトバウンド・トークンを選択します。
    3. 「JAAS login = test.generate.krb」を選択します。
  4. 保存」をクリックします。
  5. アプリケーション・サーバーを再始動して JAAS 構成の変更を適用します。
  6. サービスをテストします。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_gen_dynamickerbtoken
ファイル名:twbs_gen_dynamickerbtoken.html