トラスト・アソシエーション用のカスタム・インターセプターの開発

使用するインターセプター・クラス・メソッドを定義することができます。 WebSphere® Application Server は、com.ibm.wsspi.security.TrustAssociationInterceptor と com.ibm.wsspi.security.tai.TrustAssociationInterceptor の 2 つのトラスト・アソシエーション・インターセプター・インターフェースをサポートします。

始める前に

Tivoli® WebSEAL 以外のサード・パーティー製リバース・プロキシー・サーバーを使用している場合は、ご使用のプロキシー・サーバーの製品インターセプター・インターフェースに関する実装クラスを提供する必要があります。 実装する必要がある com.ibm.wsspi.security.TrustAssociationInterceptor.java インターフェースについて説明します。
注: トラスト・アソシエーション・インターセプター (TAI) のインターフェース (com.ibm.wsspi.security.tai.TrustAssociationInterceptor) は、いくつかの新しい機能をサポートしており、既存の com.ibm.wsspi.security.TrustAssociationInterceptor のインターフェースとは異なっています。

手順

  1. インターセプター・クラス・メソッドを定義します。 WebSphere Application Server には、以下のメソッドを定義するインターセプター Java™ インターフェース com.ibm.wsspi.security.TrustAssociationInterceptor が備わっています。
    • public boolean isTargetInterceptor(HttpServletRequest req)WebTrustAssociationException; を作成します。

      isTargetInterceptor メソッドは、要求がインターセプターと関連付けられた プロキシー・サーバーから発信されているかどうかを判断します。実装コードは、着信要求オブジェクトを検査して、 要求を転送しているプロキシー・サーバーがこのインターセプターにとって有効なプロキシー・サーバーであるかどうかを判別しなければなりません。 このメソッドの結果によって、インターセプターが要求を処理するかどうかが決まります。

    • public void validateEstablishedTrust (HttpServletRequest req)WebTrustAssociationException; を作成します。

      validateEstablishedTrust メソッドは、要求を発信したプロキシー・サーバーが信頼できるかどうかを判断します。 このメソッドは、 isTargetInterceptor メソッドのあとに呼び出されます。実装コードは、プロキシー・サーバーを認証しなければなりません。 この認証メカニズムは、プロキシー・サーバー特有のものです。 例えば、WebSeal サーバー用の製品実装では、 このメソッドは、HTTP ヘッダーから基本認証情報を取得し、WebSphere Application Server が使用するユーザー・レジストリーと 照らし合わせてこの情報の妥当性を検査します。クレデンシャルが無効な場合、コードは WebTrustAssociationException を作成して、プロキシー・サーバーを信頼せず、要求を拒否することを示します。

    • public String getAuthenticatedUsername(HttpServletRequest req)WebTrustAssociationException; を作成します。

      getAuthenticatedUsername メソッドは、プロキシー・サーバーと WebSphere Application Server 間に信頼を確立した後に呼び出されます。製品は要求のプロキシー・サーバー認証を受け入れているため、ここで要求を許可する必要があります。 要求を許可するには、発信元リクエスターの名前を許可ポリシーに送信して、リクエスターに必須の特権があるかどうかを判別します。 このメソッドの実装コードは HTTP 要求ヘッダーからユーザー名を抽出して、要求されたリソースに対する権限がユーザーにあるかどうかを判別する必要があります。 例えば、WebSEAL サーバーの製品実装の場合、このメソッドは HTTP 要求ヘッダー内で iv-user 属性を検索し、関連する ユーザー ID を抽出して許可します。

  2. インターセプターを構成します。インターセプターを構成可能にするには、インターセプターによって com.ibm.wsspi.security.WebSphereBaseTrustAssociationInterceptor を拡張する必要があります。 以下のメソッドを実装します。
    public int init (java.util.Properties props)。
    init(Properties) メソッドは、 インターセプターを初期化するために必要なプロパティーのセットを含んだ、java.util.Properties オブジェクトを受け入れます。 インターセプター用に設定されるすべてのプロパティーは、 (そのインターセプター用の「カスタム・プロパティー」リンクまたはスクリプトを使用することにより) このメソッドに送信されます。インターセプターの初期化には、これらのプロパティーが使用されます。 例えば、 本製品の WebSEAL サーバー用実装においては、 このメソッドはホストおよびポートを読み取るため、入ってくる要求は、 トラステッド・ホストおよびポートから発信される要求であるか検査されます。戻り値 0 は、インターセプターの初期化が成 功したことを意味しています。その他の値の場合は、 その初期化が失敗したことを意味しており、インターセプターは無視されます。

    以下のリストの適用度

    前の実装のトラスト・アソシエーション・インターセプターが、別のエラー状況を戻す場合は、例外に一致するように実装を変更するか、あるいは以下の変更のいずれかを行うことができます。
    • com.ibm.wsspi.security.trustassociation.initStatus プロパティーを、トラスト・アソシエーション・インターセプターのカスタム・プロパティーに追加します。 プロパティーを、インターセプターが正常に初期化されたことを示す値に設定します。 それ以外の値は、すべて失敗を意味することになります。 失敗した場合には、対応するトラスト・アソシエーション・インターセプターは使用されません。
    • com.ibm.wsspi.security.trustassociation.ignoreInitStatus プロパティーを、トラスト・アソシエーション・インターセプターのカスタム・プロパティーに追加します。 このプロパティーの値を true に設定します。これにより、WebSphere Application Server がこのメソッドの状況を無視するように指定されます。このプロパティーをカスタム・プロパティーに追加した場合、WebSphere Application Server は、前のバージョンの WebSphere Application Server と同様に、戻り状況を検査しません。
    public void cleanup ();
    このメソッドは、アプリケーション・サーバーを停止した場合に呼び出されます。インターセプターの終了を準備する場合に使用します。
    public void setVersion (String s);
    このメソッドはオプションです。バージョンを設定する場合に使用される、単なる情報用のメソッドです。 デフォルト値は Unspecified です。
    カスタム・インターセプター実装で実装される以下のメソッドを構成する必要があります。 このリストにはメソッドのみが表示され、実装は含まれていません。
    ********************************************************************
    import java.util.*;
    import javax.servlet.http.HttpServletRequest;
    import com.ibm.websphere.security.*;
    
    public class myTAIImpl extends WebSphereBaseTrustAssociationInterceptor
          implements TrustAssociationInterceptor
    {
    
          public myTAIImpl ()
          {
          }
    
    
          public boolean isTargetInterceptor (HttpServletRequest req)
              throws WebTrustAssociationException
          {
    
               //return true if this is the target interceptor, else return false.
          }
    
    
          public TAIResult negotiateValidateandEstablishTrust (HttpServletRequest
    req, HttpServletResponse res)           throws WebTrustAssociationFailedException
          {
               //validate the request and establish trust.
               //create and return the TAIResult
    public int initialize(Properties props)      {
               //initialize the implementation. If successful return 0, else return 1.
          }
    
         public String getVersion()     {
    	       //Return version
         }  
    	
    	  public String getType()     {
    	       //Return type
         }  
    
          public void cleanup ()
          {
               //Cleanup code.
    
          }
            
    
    }     
    注: init(Properties) メソッドをカスタム・インターセプターの以前の記述に従って実装した場合、この注意事項は実装に適用されません。次のステップに進んでください。 以前のバージョンの com.ibm.wsspi.security.WebSphereBaseTrustAssociationInterceptor には、public int init (String propsfile) メソッドが含まれています。インターセプター・プロパティーはファイルから読み取られないため、このメソッドは不要です。 プロパティーは管理コンソールまたはスクリプトを使用して、インターセプターの管理コンソール「カスタム・プロパティー」リンクに入力されます。 これらのプロパティーは、init(Properties) メソッドで実装に使用できるようになります。 ただし、後方互換性を保つために、init(String) メソッドは引き続きサポートされています。 以下の例のように、init(String) メソッドは init(Properties) のデフォルト実装で呼び出されます。
    // Default implementation of init(Properties props) method. A Custom
       // implementation should override this.
       public int init (java.util.Properties props)
       {
          String type =
           props.getProperty("com.ibm.wsspi.security.trustassociation.types");
          String classfile=
           props.getProperty("com.ibm.wsspi.security.trustassociation."
           +type+".config");
          if (classfile != null && classfile.length() > 0 ) {
             return init(classfile);
          } else {
             return -1;
          }
       }

    init(String propsfile) メソッドではなく、init(Properties) メソッドを 実装するように実装を変更します。上記の例のように、このデフォルト実装はプロパティーを読み取って、プロパティー・ファイルをロードします。 com.ibm.wsspi.security.trustassociation.types プロパティーは .config を値に連結して、プロパティーを含むファイルを取得します。

    注: init(Properties) メソッドを実装する代わりに、init(String) メソッドを使用した場合でも、機能します。 唯一の要件は、カスタム・トラスト・アソシエーション・プロパティーを含むファイル名を、 管理コンソール内の、インターセプター用の「カスタム・プロパティー」リンク またはスクリプトを使用して入力することです。以下のメソッドの いずれか を使用して、プロパティーを入力することができます。最初のメソッドは、 WebSphere Application Server の以前のバージョンとの後方互換性のために使用されます。
    メソッド 1:
    前のリリースで使用された、 同一のプロパティー名が、そのファイル名を取得するために使用されます。 そのファイル名は、com.ibm.wsspi.security.trustassociation.types プロパティー値に .config を連結することにより取得されます。
    [IBM i][AIX Solaris HP-UX Linux Windows]ファイル名が myTAI.properties という名前で、app_server_root/properties ディレクトリーに配置されている場合、次のようにプロパティーを設定します。
    • com.ibm.wsspi.security.trustassociation.types = myTAItype
    • com.ibm.wsspi.security.trustassociation.myTAItype.config = app_server_root/properties/myTAI.properties
    [z/OS]ファイル名が myTAI.properties という名前で、/properties ディレクトリーに配置されている場合、次のようにプロパティーを設定します。
    • com.ibm.wsspi.security.trustassociation.types = myTAItype
    • com.ibm.wsspi.security.trustassociation.myTAItype.config = app_server_root/myTAI.properties
    メソッド 2:
    トラスト・アソシエーションのカスタム・プロパティーにある com.ibm.wsspi.security.trustassociation.initPropsFile プロパティーを、ファイルのロケーションに設定できます。 例えば、次のようにプロパティーを設定します。
    [IBM i][AIX Solaris HP-UX Linux Windows]
    com.ibm.wsspi.security.trustassociation.initPropsFile=
    app_server_root/properties/myTAI.properties
    [z/OS]
    com.ibm.wsspi.security.trustassociation.initPropsFile=
    app_server_root/myTAI.properties

    これらのコードは、1 つの連続した行として入力してください。

    [AIX Solaris HP-UX Linux Windows][IBM i]プロパティー・ファイルの場所は完全に修飾します (app_server_root/properties/myTAI.properties など)。WebSphere Application Server Network Deployment 環境で場所が異なる可能性があるため、${USER_INSTALL_ROOT} などの変数を使用して、WebSphere Application Server のインストール・ディレクトリーを参照します。例えば、ファイル名が myTAI.propertiesapp_server_root/properties ディレクトリーに配置されている場合は、次のようにプロパティーを設定します。

    [z/OS]プロパティー・ファイルの場所は完全に修飾します (app_server_root/myTAI.properties など)。WebSphere Application Server Network Deployment 環境で場所が異なる可能性があるため、${USER_INSTALL_ROOT} などの変数を使用して、WebSphere Application Server のインストール・ディレクトリーを参照します。例えば、ファイル名が myTAI.properties という名前で、/properties ディレクトリーに配置されている場合、次のようにプロパティーを設定します。
    • com.ibm.wsspi.security.trustassociation.types = myTAItype
    • [IBM i][AIX Solaris HP-UX Linux Windows]com.ibm.wsspi.security.trustassociation.myTAItype.config = c:/WebSphere/AppServer/properties/myTAI.properties
    • [z/OS]com.ibm.wsspi.security.trustassociation.myTAItype.config = app_server_root/myTAI.properties
  3. 実装が完了したら、実装をコンパイルします。以下に例を示します。 app_server_root/java/bin/javac -classpath install_root/plugins/com.ibm.ws.runtime.jar;<install_root>/dev/JavaEE/j2ee.jar myTAIImpl.java
    1. [AIX Solaris HP-UX Linux Windows][z/OS]サーバーの始動時に使用するトラスト・アソシエーション・インターセプター・クラス・ファイルを特定します。 このファイルを app_server_root/classes ディレクトリーに入れるか、あるいは、Java 仮想マシン (JVM) システム・プロパティー -Dws.ext.dirs を使用して、このファイルが存在する場所を指定します。
    2. [IBM i]カスタム・トラスト・アソシエーション・インターセプターのクラス・ファイルを、製品のクラスパスで指定されているロケーションにコピーします。 これらのクラス・ファイルは、profile_root/classes ディレクトリーにコピーします。

      このクラス・ファイルは、各ノードおよびセルの profile_root/classes ディレクトリーにコピーする必要があります。

    3. すべてのサーバーを再始動します。
  4. 管理コンソールでデフォルト WebSEAL インターセプターを削除し、「新規」をクリックしてカスタム・インターセプターを追加します。 クラス名がドットで区切られていて、クラスパスに表示されていることを確認します。
  5. カスタム・プロパティー」リンクをクリックして、 カスタム・インターセプターの初期化に必要な追加プロパティーを追加します。 上記ステップに従って com.ibm.wsspi.security.WebSphereBaseTrustAssociationInterceptor を拡張した場合は、これらのプロパティーが実装の init(Properties) メソッドに渡されます。
  6. 該当する場合、構成を保存および同期化します。
  7. サーバーを再起動して、カスタム・インターセプターを有効にします。

カスタム・インターセプターの例については、 『セキュリティー: 学習用リソース』の項目を 参照してください。

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



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