カスタム・トラスト・アソシエーション・インターセプターの開発
Session Initiation Protocol (SIP) アプリケーションを開発する場合、 カスタム・トラスト・アソシエーション・インターセプター (TAI) を作成することができます。
始める前に
トラスト・アソシエーションの文書で説明されている TAI の一般情報を十分理解する必要があります。SIP TAI の開発は、トラスト・アソシエーションで使用される他のカスタム・インターセプターの開発と類似しています。実際、SIP アプリケーション用のカスタム TAI は、実質的にトラスト・アソシエーション・インターセプター・モデルの拡張機能です。詳しくは、トラスト・アソシエーション用のカスタム・インターセプターの開発のセクションを参照してください。
このタスクについて
TAI は、SIP サーブレット要求または SIP サーブレット応答によって起動することができます。 カスタム SIP TAI を実装するには、ユーザー独自の Java クラスを書き込む必要があります。
手順
- com.ibm.wsspi.security.tai.BaseTrustAssociationInterceptor クラスを拡張、および com.ibm.websphere.security.tai.SIPTrustAssociationInterceptor インターフェースを実装する Java クラスを書き込みます。 これらのクラスは、WASProductDir/plugins/com.ibm.ws.sip.container_1.0.0.jar ファイルで定義されており、 ここで、WASProductDir は、WebSphere® Application Server がインストールされているディレクトリーの完全修飾パス名です。
- 以下の Java メソッドを宣言します。
- public int initialize(Properties properties) throws WebTrustAssociationFailedException;
- この Java メソッドが起動された後で、必要とされるリソースすべてが実装によって割り振られるように、最初のメッセージが処理されます。例えば、この Java メソッドが起動されたことにより、データベースへの接続が設定されます。WebTrustAssociationFailedException は、WASProductDir/plugins/com.ibm.ws.runtime_1.0.0.jar ファイルで定義されています。 properties 引数の値は、このステップの中の「カスタム・プロパティー」設定から得られます。
- public void cleanup();
- この Java メソッドは、TAI が保持しているリソースすべてを解放する必要がある場合に起動されます。例えば、 この Java メソッドの起動によって、データベースへの接続がクローズされます。
- public boolean isTargetProtocolInterceptor(SipServletMessage sipMsg) throws WebTrustAssociationFailedException;
- カスタム TAI では、sipMsg メッセージを処理するために、このメソッドを使用する必要があります。このメソッドが false を戻す場合、WebSphere では sipMsg に対する TAI が無視されます。
- public TAIResult negotiateValidateandEstablishProtocolTrust (SipServletRequest req, SipServletResponse resp) throws WebTrustAssociationFailedException;
- このメソッドは、処理されたメッセージの状況を示す TAIResult、および
認証を試行中のユーザーに対するユーザー ID または固有 ID を戻します。認証が正常に行われた場合、TAIResult には、
状況 HttpServletResponse.SC_OK およびプリンシパルが含まれている必要があります。認証が失敗した場合、
TAIResult には、HttpServletResponse.SC_UNAUTHORIZED
(401)、SC_FORBIDDEN (403)、または SC_PROXY_AUTHENTICATION_REQUIRED (407) の戻りコードが含まれている必要があります。
これ以上の処理に対するメッセージをコンテナーで受け入れる必要があるかどうかのみが、指示されます。着信要求を要請する場合は、TAI 実装で、要請を含む独自の SipServletResponse を生成および送信する必要があります。例外は、
内部 TAI エラーについてスローされます。表 1では、
negotiateValidateandEstablishProtocolTrust
メソッドに対する引数値、および結果として起こるアクションについて説明しています。イベントの手順は以下のとおりです。
表 1. negotiateValidateandEstablishProtocolTrust 引数およびアクションについての説明. 次の表に、negotiateValidateandEstablishProtocolTrust 引数およびアクションの説明を示します。
引数またはアクション SIP 要求の場合 SIP 応答の場合 req 引数の値 着信要求 Null resp 引数の値 Null 着信応答 有効な応答クレデンシャルに対するアクション SC_OK を含む TAIResult.status およびユーザー ID または固有 ID を戻します。 SC_OK を含む TAIResult.status およびユーザー ID または固有 ID を戻します。 正しくない応答クレデンシャルに対するアクション 4xx 状況を伴う TAIResult を戻します。 4xx 状況を伴う TAIResult を戻します。 - SIP コンテナーにより、各アプリケーション・デプロイメント記述子における規則を使用して、初期要求がアプリケーションにマップされます。 つまり、これ以降のメッセージはJSR 116メカニズムに基づいてマップされます。
- アプリケーションのいずれかでセキュリティーが必要な場合、SIP コンテナーによって、 メッセージに対して定義された TAI 実装のいずれかが起動されます。
- メッセージによってセキュリティーが受け渡される場合、コンテナーによって、対応するアプリケーションが起動されます。
WASProductDir/plugins/com.ibm.ws.runtime_1.0.0.jar ファイルで定義されている com.ibm.wsspi.security.tai.TAIResult クラスには、TAIResult 作成用の 3 つの静的メソッドがあります。 TAIResult create メソッドでは、 int 型が最初のパラメーターとして実行されます。WebSphere Application Server では、 この結果が有効な HTTP 要求戻りコードとして返される必要があり、結果を以下のように解釈します。
値が HttpServletResponse.SC_OK ならば、この応答は WebSphere Application Server に対し、TAI のネゴシエーションが終了したことを知らせます。この応答はまた、WebSphere Application Server に、TAIResult の情報を使ってユーザー ID を作成するよう指示します。
作成された TAIResults は、表 2に示される意味を持ちます。
表 2. TAIResults の意味. 次の表に、TAIResults の意味を示します。
TAIResult 説明 public static TAIResult create(int status); WebSphere Application Server に対する状況を示します。 識別情報が提供されるため、この結果は SC_OK にはなりません。 public static TAIResult create(int status, String principal); WebSphere Application Server に対する状況を示し、このユーザーのユーザー ID または固有の ID を提供します。 WebSphere Application Server は ユーザー・レジストリーを照会してクレデンシャルを作成します。 public static TAIResult create(int status, String principal, Subject subject); WebSphere Application Server に対する状況、ユーザーのユーザー ID または固有の ID、およびカスタム・サブジェクトを示します。 サブジェクトに hashtable が含まれている場合は、基本は無視されます。 サブジェクトの内容は最終的なユーザー・サブジェクトの一部となります。 - public String getVersion();
- このメソッドでは、現行 TAI 実装のバージョン番号が戻されます。
- public String getType();
- このメソッドの戻り値は、実装によって異なります。
- 実装後に、実装をコンパイルします。以下に例を示します。/opt/WebSphere/AppServer/java/bin/javac -classpath
/opt/WebSphere/AppServer/plugins/com.ibm.ws.runtime_1.0.0.jar;/opt/WebSphere/AppServer/dev/JavaEE/j2ee.jar;/opt/WebSphere/AppServer/plugins/com.ibm.ws.sip.container_1.0.0.jar
myTAIImpl.java
- クラスター内の各サーバーの場合には、 WebSphere クラスパス内のロケーション (可能な場合は WASProductDir/plugin/ ディレクトリー) にクラス・ファイルをコピーします。
- すべてのサーバーを再始動します。
- 管理コンソールでデフォルト WebSEAL インターセプターを削除し、 「新規」をクリックしてカスタム・インターセプターを追加します。このクラス名がドットで区切られており、 クラスパス内に表示されることを確認してください。
- 「カスタム・プロパティー」リンクをクリックして、 カスタム・インターセプターの初期化に必要な追加プロパティーを追加します。これらのプロパティーは、前のステップで説明されているとおり、com.ibm.websphere.security.WebSphereBaseTrustAssociationInterceptor が拡張される際に、実装の initialize(Properties properties) メソッドに渡されます。
- 該当する場合、構成を保存および同期化します。
- サーバーを再起動して、カスタム・インターセプターを有効にします。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsip_devctai
ファイル名:tsip_devctai.html