开发定制 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,它指示要处理的消息的状态,以及尝试认证的用户的用户标识或唯一标识。如果认证成功,那么 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 返回包含 SC_OK 及用户标识或唯一标识的 TAIResult.status
    对于不正确响应凭证的操作 返回 TAIResult 及 4xx 状态 返回 TAIResult 及 4xx 状态
    事件的顺序如下:
    1. SIP 容器通过使用每个应用程序部署描述符中的规则将初始请求映射至应用程序;后续消息根据 JSR289 机制进行映射。
    2. 如果任何应用程序需要安全性,SIP 容器则为该消息调用任何定义的 TAI 实现。
    3. 如果该消息传递安全性,此容器会调用相应的应用程序。
    您的 TAI 实现可以修改 SIP 消息,但由于此修改的消息在容器调用 TAI 之前已完成,因此在请求映射进程内将不可用。

    ${wlp.install.dir}/lib/com.ibm.ws.security.authentication.tai_1.0.10.jar 文件中定义的 com.ibm.wsspi.security.tai.TAIResult 类有三个用于创建 TAIResult 的静态方法。TAIResult 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 指示状态并提供此用户的用户标识或唯一标识。WebSphere 将通过查询用户注册表来创建凭证。
    public static TAIResult create(int status, String principal, Subject subject); 对 WebSphere Application Server 指示状态、该用户的用户标识或唯一标识及定制主体集。如果主体集包含散列表,那么会忽略主体。主体集的内容成为最终用户主体集的一部分。
    public String getVersion();
    此方法返回当前 TAI 实现的版本号。
    public String getType();
    此方法的返回值是依赖于实现的。
  3. 实现它之后编译该实现,以创建您自己的 SIP TAI jar 文件。
  4. 遵循在 Liberty 中配置 TAI 主题中描述的步骤 3 到 4 以将 Liberty 服务器配置为使用 SIP TAI。

用于指示主题类型的图标 任务主题

文件名:twlp_custom_sip_tai.html