Desarrollo de un TAI SIP personalizado

Al desarrollar aplicaciones SIP (Session Initiation Protocol), puede crear un interceptor de asociación de confianza (TAI) personalizado.

Antes de empezar

El desarrollo de un TAI SIP es similar al desarrollo de cualquier otro interceptor personalizado utilizado en asociaciones de confianza. De hecho, un TAI personalizado para una aplicación SIP es una extensión del modelo de interceptor de interceptor de asociación de confianza.

Acerca de esta tarea

Una solicitud de servlet SIP o una respuesta de servlet SIP puede invocar un TAI. Para implementar un TAI SIP personalizado, tendrá que escribir su propia clase Java™.

Procedimiento

  1. Escriba una clase Java que amplía la clase com.ibm.wsspi.security.tai.extension.BaseTrustAssociationInterceptor e implementa la interfaz com.ibm.websphere.security.tai.extension.SIPTrustAssociationInterceptor. Estas clases están definidas en el archivo ${wlp.install.dir}/dev/api/ibm/ccom.ibm.websphere.appserver.api.sipServletSecurity.1.0_1.0.10.jar.
  2. Declare los métodos Java siguientes:
    public int initialize(Properties properties) throws WebTrustAssociationFailedException;
    Esto se invoca antes de que se procese el primer mensaje, de forma que la implementación puede asignar cualquier recursos que necesita. Por ejemplo, podría establecer una conexión a una base de datos. WebTrustAssociationFailedException está definido en el archivo ${wlp.install.dir}/lib/com.ibm.websphere.security_1.0.10.jar. El valor del argumento properties procede de la configuración de <trustAssociation>.
    public void cleanup();
    Esto se invoca cuando el TAI puede liberar cualquier recurso que contiene. Por ejemplo, podría cerrar una conexión a una base de datos.
    public boolean isTargetProtocolInterceptor(SipServletMessage sipMsg) throws WebTrustAssociationFailedException;
    El TAI personalizado puede utilizar este método para manejar el mensaje sipMsg. Si el método devuelve false, WebSphere ignora el TAI para sipMsg.
    public TAIResult negotiateValidateandEstablishProtocolTrust (SipServletRequest req, SipServletResponse resp) throws WebTrustAssociationFailedException;
    Este método devuelve un TAIResult que indica el estado del mensaje que se está procesando y un ID de usuario o el ID exclusivo para el usuario que está intentando autenticarse. Si la autenticación es satisfactoria, TAIResult contiene el estado HttpServletResponse.SC_OK y un principal. Si la autenticación falla, TAIResult contendrá un código de retorno de HttpServletResponse.SC_UNAUTHORIZED (401), SC_FORBIDDEN (403), o SC_PROXY_AUTHENTICATION_REQUIRED (407). Esto solo indica si el contenedor deberá aceptar un mensaje para su proceso adicional. Para solicitar una petición entrante, la implementación de TAI debe generar y enviar su propia SipServletResponse que contiene una solicitud. La excepción se puede lanzar para errores de TAI internos. La tabla 1 describe los valores de argumento y las acciones resultantes para el método negotiateValidateandEstablishProtocolTrust.
    Tabla 1. Descripción de argumentos y acciones de negotiateValidateandEstablishProtocolTrust.

    Esta tabla proporciona una descripción de los argumentos y las acciones de negotiateValidateandEstablishProtocolTrust

    Argumento o acción Para una solicitud SIP Para una respuesta SIP
    Valor del argumento req La solicitud entrante Nulo
    Valor del argumento resp Nulo La respuesta entrante
    Acción para credenciales de respuesta válidas Devolver TAIResult.status que contiene SC_OK y un ID de usuario o un ID exclusivo Devolver TAIResult.status que contiene SC_OK y un ID de usuario o un ID exclusivo
    Acción para credenciales de respuesta incorrectas Devolver TAIResult con el estado 4xx Devolver TAIResult con el estado 4xx
    La secuencia de sucesos es el siguiente:
    1. El contenedor SIP correlaciona solicitudes iniciales con aplicaciones utilizando las reglas de cada descriptor de despliegue de aplicaciones; los mensajes posteriores se correlacionan basándose en mecanismos de JSR289.
    2. Si alguna de las aplicaciones requiere seguridad, el contenedor SIP invoca cualquier implementación de TAI para el mensaje.
    3. Si el mensaje pasa la seguridad, el contenedor invoca las aplicaciones correspondientes.
    La implementación de TAI puede modificar un mensaje SIP, pero el mensaje modificado no se podrá reutilizar en el proceso de correlación de solicitud, porque acaba antes de que el contenedor invoque el TAI.

    La clase com.ibm.wsspi.security.tai.TAIResult, que está definida en el archivo ${wlp.install.dir}/lib/com.ibm.ws.security.authentication.tai_1.0.10.jar, tiene tres métodos estáticos para crear un TAIResult. Los métodos TAIResult create toman un tipo int como primer parámetro. El WebSphere Application Server espera que el resultado sea un código de retorno de solicitud HTTP válido y se interpreta del modo siguiente:

    Si el valor es HttpServletResponse.SC_OK, esta respuesta indica a WebSphere que el TAI ha completado su negociación. La respuesta también indica a WebSphere que utilice la información de TAIResult para crear una identidad de usuario.

    Los TAIResults creados tienen los significados que se muestran en la tabla 2.

    Tabla 2. Significados de TAIResults.

    Esta tabla lista los significados de TAIResults

    TAIResult Descripción
    public static TAIResult create(int status); Indica un estado de WebSphere Application Server. El estado no debería ser SC_OK porque se proporciona la información de identidad.
    public static TAIResult create(int status, String principal); Indica un estado de WebSphere Application Server y proporciona el ID de usuario o el ID exclusivo para este usuario. WebSphere crea credenciales consultando el registro de usuarios.
    public static TAIResult create(int status, String principal, Subject subject); Indica un estado de WebSphere Application Server, el ID de usuario o el ID exclusivo para el usuario y un sujeto personalizado. Si el sujeto contiene una tabla hash, el principal se ignora. El contenido del sujeto pasa a formar parte del sujeto de usuario eventual.
    public String getVersion();
    Este método devuelve el número de versión de la implementación actual de TAI.
    public String getType();
    El valor de retorno de este método depende de la implementación.
  3. Compile la implementación después de haberla implementado para crear su propio archivo jar de TAI SIP.
  4. Siga los pasos 3-4 descritos en el tema Configuración de TAI en Liberty para configurar el servidor Liberty de modo que utilice TAI SIP.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_custom_sip_tai.html