カスタム SIP TAI の開発
Session Initiation Protocol (SIP) アプリケーションを開発する際、カスタム TAI (トラスト・アソシエーション・インターセプター) を作成できます。
始める前に
このタスクについて
TAI は SIP サーブレット要求または SIP サーブレット応答によって呼び出すことができます。カスタム SIP TAI を実装するには、独自の Java™ クラスを作成する必要があります。
手順
- com.ibm.wsspi.security.tai.extension.BaseTrustAssociationInterceptor クラスを拡張し、 com.ibm.websphere.security.tai.extension.SIPTrustAssociationInterceptor インターフェースを実装する、Java クラスをコーディングします。 それらのクラスは ${wlp.install.dir}/dev/api/ibm/ccom.ibm.websphere.appserver.api.sipServletSecurity.1.0_1.0.10.jar ファイル内に定義されます。
- 以下の Java メソッドを宣言します。
- public int initialize(Properties properties) throws WebTrustAssociationFailedException;
- これは、この実装が必要とするすべてのリソースを割り振ることができるように、最初のメッセージが処理される前に呼び出されます。例えば、 データベースへの接続を確立します。WebTrustAssociationFailedException は ${wlp.install.dir}/lib/com.ibm.websphere.security_1.0.10.jar ファイル内に定義されます。 properties 引数の値は <trustAssociation> 構成から取得されます。
- public void cleanup();
- これは、TAI が保有リソースを解放できるときに呼び出されます。 例えば、データベースへの接続をクローズします。
- public boolean isTargetProtocolInterceptor(SipServletMessage sipMsg) throws WebTrustAssociationFailedException;
- カスタム TAI は、sipMsg メッセージを扱うためにこのメソッドを使用できます。 このメソッドが false を返す場合、WebSphere® は sipMsg に対してこの TAI を無視します。
- public TAIResult negotiateValidateandEstablishProtocolTrust (SipServletRequest req, SipServletResponse resp) throws WebTrustAssociationFailedException;
- このメソッドは、処理されているメッセージの状況と認証を試行しているユーザーのユーザー ID または固有 ID を示す TAIResult を返します。認証が成功の場合、
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 引数の値 着信要求 ヌル resp 引数の値 ヌル 着信応答 応答資格情報が有効な場合のアクション SC_OK とユーザー ID または固有 ID を含んでいる TAIResult.status を返す SC_OK とユーザー ID または固有 ID を含んでいる TAIResult.status を返す 応答資格情報が正しくない場合のアクション 4xx 状況と共に TAIResult を返す 4xx 状況と共に TAIResult を返す - SIP コンテナーは、各アプリケーション・デプロイメント記述子内のルールを使用して、初期要求をアプリケーションにマップします。 以降のメッセージは JSR289 メカニズムに基づいてマップされます。
- アプリケーションのどれかがセキュリティーを必要とする場合、SIP コンテナーは、メッセージに対して、定義されたすべての TAI 実装を呼び出します。
- メッセージがセキュリティーに合格した場合、コンテナーは対応するアプリケーションを呼び出します。
${wlp.install.dir}/lib/com.ibm.ws.security.authentication.tai_1.0.10.jar ファイル内に定義されている com.ibm.wsspi.security.tai.TAIResult クラスには、 TAIResult を作成するための 3 つの静的メソッドがあります。 それらの TAIResult create メソッドは、先頭パラメーターとして int 型を使用します。WebSphere Application Server は、 結果は有効な HTTP 要求戻りコードであると想定していて、それは次のように解釈されます。
値が HttpServletResponse.SC_OK の場合、 この応答は、TAI がネゴシエーションを完了したことを WebSphere に知らせます。また、応答は、 TAIResult に含まれる情報を使用してユーザー ID を作成するように WebSphere に指示します。
作成される TAIResult の意味は、表 2 に示されているとおりです。
表 2. TAIResult の意味. この表は、TAIResult の意味をリストします。
TAIResult 説明 public static TAIResult create(int status); 状況を WebSphere Application Server に示します。ID 情報が提供されるため、状況は SC_OK であってはなりません。 public static TAIResult create(int status, String principal); 状況を WebSphere Application Server に示し、このユーザーのユーザー ID または固有 ID を提供します。WebSphere は、ユーザー・レジストリーを照会することによって資格情報を作成します。 public static TAIResult create(int status, String principal, Subject subject); 状況を WebSphere Application Server に示し、ユーザーのユーザー ID または固有 ID、およびカスタム・サブジェクトも示します。サブジェクトにハッシュ・テーブルが含まれている場合、プリンシパルは無視されます。サブジェクトの内容は、実際のユーザー・サブジェクトの一部になります。 - public String getVersion();
- このメソッドは、現行 TAI 実装のバージョン番号を返します。
- public String getType();
- このメソッドの戻り値は実装によって異なります。
- 実装を実装してからコンパイルして、独自の SIP TAI jar ファイルを作成します。
- 『Liberty での TAI の構成』トピックのステップ 3 から 4 に従って、SIP TAI を使用するように Liberty サーバーを構成します。

ファイル名: twlp_custom_sip_tai.html