開發自訂 SIP TAI

在您開發「階段作業起始通訊協定 (SIP)」應用程式時,您可以建立自訂的信任關聯攔截程式 (TAI)。

開始之前

SIP TAI 的開發類似於開發信任關聯中使用的其他任何自訂攔截程式。事實上,用於 SIP 應用程式的自訂 TAI 是信任關聯攔截程式模型的延伸。

關於這項作業

TAI 可由 SIP Servlet 要求或 SIP Servlet 回應來呼叫。如果要實作自訂 SIP TAI,您需要撰寫自己的 Java™ 類別。

程序

  1. 撰寫 Java 類別,使其延伸 com.ibm.wsspi.security.tai.extension.BaseTrustAssociationInterceptor 類別,並實作 com.ibm.websphere.security.tai.extension.SIPTrustAssociationInterceptor 介面。這些類別定義在 ${wlp.install.dir}/dev/api/ibm/ccom.ibm.websphere.appserver.api.sipServletSecurity.1.0_1.0.10.jar 檔中。
  2. 宣告下列 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;
    此方法會傳回 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 引數的值 送入的要求 空值
    resp 引數的值 空值 送入的回應
    回應認證有效時的動作 傳回 TAIResult.status,內含 SC_OK 和使用者 ID 或唯一 ID 傳回 TAIResult.status,內含 SC_OK 和使用者 ID 或唯一 ID
    回應認證不正確時的動作 傳回 TAIResult,內含 4xx 狀態 傳回 TAIResult,內含 4xx 狀態
    事件的順序如下:
    1. SIP 儲存器使用每一個應用程式部署描述子中的規則,將起始要求對映至應用程式;後續訊息是根據 JSR289 機制來對映。
    2. 若有任何應用程式需要安全,SIP 儲存器會針對訊息呼叫任何已定義的 TAI 實作。
    3. 如果訊息會傳遞安全,儲存器會呼叫對應的應用程式。
    您的 TAI 實作可以修改 SIP 訊息,但是在要求對映處理程序中無法使用修改後的訊息,這是因為它是在儲存器呼叫 TAI 之前就已完成。

    com.ibm.wsspi.security.tai.TAIResult 類別(定義在 ${wlp.install.dir}/lib/com.ibm.ws.security.authentication.tai_1.0.10.jar 檔中)提供三個靜態方法來建立 TAIResultTAIResult create 方法會以 int 類型作為第一個參數。WebSphere Application Server 會預期結果是有效的 HTTP 要求回覆碼,且會解譯成如下:

    如果值是 HttpServletResponse.SC_OK,此回應會告知 WebSphere TAI 已完成其協議。回應也會告知 WebSphere 使用 TAIResult 中的資訊來建立使用者身分。

    所建立的 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 會查詢使用者登錄,以建立認證。
    public static TAIResult create(int status, String principal, Subject subject); 指出 WebSphere Application Server 的狀態、使用者的使用者 ID 或唯一 ID,以及自訂「主體」。如果「主體」包含「雜湊表」,則會忽略主體身分。「主體」的內容會成為最終使用者「主體」的一部分。
    public String getVersion();
    此方法會傳回現行 TAI 實作的版本號碼。
    public String getType();
    此方法的回覆值取決於該實作。
  3. 在實作之後,編譯該實作,以建立您自己的 SIP TAI jar 檔。
  4. 遵循在 Liberty 中配置 TAI 主題中所說明的步驟 3 至 4,以便將 Liberty 伺服器配置成使用 SIP TAI。

指示主題類型的圖示 作業主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_custom_sip_tai
檔名:twlp_custom_sip_tai.html