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 エラーについてスローされます。negotiateValidateandEstablishProtocolTrust
引数およびアクションについての説明では、
negotiateValidateandEstablishProtocolTrust
メソッドに対する引数値、および結果として起こるアクションについて説明しています。
表 1. 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 インプリメンテーションのいずれかが起動されます。
- メッセージによってセキュリティーが受け渡される場合、コンテナーによって、対応するアプリケーションが起動されます。
TAI インプリメンテーションによって 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 は、TAIResults の意味に示される意味を持ちます。
表 2. 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/lib/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) メソッドに渡されます。
- 該当する場合、構成を保管および同期化します。
- カスタム・インターセプターを有効にするには、サーバーを再始動してください。