Desenvolvendo um Trust Association Interceptor Customizado

Ao desenvolver aplicativos SIP (Session Initiation Protocol), você pode criar um TAI (Tust Association Interceptor) customizado.

Antes de Iniciar

Talvez você queira familiarizar-se com as informações gerais do TAI contidas na documentação Associações de Confiança. Desenvolver um SIP TAI é semelhante a desenvolver qualquer outro interceptor customizado utilizado nas associações de confiança. Na realidade, um TAI customizado para um aplicativo SIP é, na verdade, uma extensão do modelo do TAI (Trust Association Interceptor). Consulte Desenvolvendo um Interceptor Customizado para Associações de Confiança para obter detalhes adicionais.

Sobre Esta Tarefa

O TAI pode ser chamado por um pedido do servlet SIP ou uma resposta do servlet SIP. Para implementar um TAI SIP customizado, você precisa gravar sua própria classe Java.

Procedimento

  1. Grave uma classe Java que estenda a classe com.ibm.wsspi.security.tai.BaseTrustAssociationInterceptor e implemente a interface com.ibm.websphere.security.tai.SIPTrustAssociationInterceptor. Essas classes estão definidas no arquivo WASProductDir/plugins/com.ibm.ws.sip.container_1.0.0.jar, em que WASProductDir é o nome do caminho completo do diretório no qual o WebSphere Application Server está instalado.
  2. Declare os seguintes métodos Java:
    public int initialize(Properties properties) throws WebTrustAssociationFailedException;
    Isso é chamado antes que a primeira mensagem seja processada de modo que a implementação possa alocar todos os recursos que precisar. Por exemplo, poderia estabelecer uma conexão a um banco de dados. WebTrustAssociationFailedException está definido no arquivo WASProductDir/plugins/com.ibm.ws.runtime_1.0.0.jar. O valor do argumento properties é fornecido com as Propriedades Customizadas configuradas nesta etapa.
    public void cleanup();
    Isso é chamado quando o TAI tiver que liberar alguns recursos que retém. Por exemplo, poderia encerrar uma conexão a um banco de dados.
    public boolean isTargetProtocolInterceptor(SipServletMessage sipMsg) throws WebTrustAssociationFailedException;
    Seu TAI customizado deve utilizar esse método para manipular a mensagem sipMsg. Se o método retornar false, o WebSphere ignorará seu TAI para sipMsg.
    public TAIResult negotiateValidateandEstablishProtocolTrust (SipServletRequest req, SipServletResponse resp) throws WebTrustAssociationFailedException;
    Esse método retorna um TAIResult que indica o status da mensagem sendo processada e um ID do usuário ou o ID exclusivo para o usuário que está tentando autenticar. Se a autenticação for bem-sucedida, o TAIResult deve conter o status HttpServletResponse.SC_OK e um proprietário. Se a autenticação falhar, o TAIResult deve conter um código de retorno HttpServletResponse.SC_UNAUTHORIZED (401), SC_FORBIDDEN (403) ou SC_PROXY_AUTHENTICATION_REQUIRED (407). Isso indica apenas se o contêiner deve ou não aceitar uma mensagem para processamento adicional. Para contestar um pedido que chega, a implementação TAI deve gerar e enviar seu próprio SipServletResponse contendo um desafio. A exceção deve ser emitida para erros TAI internos. A Tabela 1 descreve os valores de argumento e as ações resultantes para o método negotiateValidateandEstablishProtocolTrust.
    Tabela 1. Descrição de argumentos e ações do negotiateValidateandEstablishProtocolTrust.

    Esta tabela fornece uma descrição de argumentos negotiateValidateandEstablishProtocolTrust e ações

    Argumento ou Ação Para um pedido SIP Para uma resposta SIP
    Valor do argumento req O pedido que chega Nulo
    Valor do argumento resp Nulo A resposta que chega
    Ação para credenciais de resposta válidas Retorne o TAIResult.status que contém SC_OK e um ID do usuário ou ID exclusivo Retorne o TAIResult.status que contém SC_OK e um ID do usuário ou ID exclusivo
    Ação para credenciais de resposta incorretas Retorne o TAIResult com o status 4xx Retorne o TAIResult com o status 4xx
    A sequência de eventos é a seguinte:
    1. O contêiner SIP mapeia os pedidos iniciais para os aplicativos utilizando as regras em cada descritor de implementação de aplicativos; as mensagens subseqüentes são mapeadas com base nos mecanismos JSR 116.
    2. Se algum aplicativo precisar de segurança, o contêiner SIP chamará quaisquer implementações TAI definidas para a mensagem.
    3. Se a mensagem passar na segurança, o contêiner chamará os aplicativos correspondentes.
    Sua implementação TAI pode modificar uma mensagem SIP, mas a mensagem modificada não poderá ser utilizada dentro do processamento de mapeamento de pedido, porque é encerrado antes que o contêiner chame o TAI.

    A classe com.ibm.wsspi.security.tai.TAIResult, definida no arquivo WASProductDir/plugins/com.ibm.ws.runtime_1.0.0.jar, possui três métodos estáticos para criar um TAIResult. Os métodos TAIResult create utilizam um tipo int como o primeiro parâmetro. O WebSphere Application Server espera que o resultado seja um código de retorno de solicitação HTTP válido e seja interpretado da seguinte forma:

    Se o valor for HttpServletResponse.SC_OK, essa resposta informará ao WebSphere Application Server que o TAI concluiu sua negociação. A resposta também informa ao WebSphere Application Server que deve usar as informações no TAIResult para criar uma identidade de usuário.

    Os TAIResults criados possuem os significados mostrados em Tabela 2.

    Tabela 2. Significados dos TAIResults.

    Esta tabela lista os significados de TAIResults

    TAIResult Explicação
    public static TAIResult create(int status); Indica um status para WebSphere Application Server. O status não deve ser SC_OK, porque as informações de identidade são fornecidas.
    public static TAIResult create(int status, String principal); Indica um status para o WebSphere Application Server e fornece o ID do usuário ou o ID exclusivo para esse usuário. O WebSphere Application Server cria credenciais, consultando o registro do usuário.
    public static TAIResult create(int status, String principal, Subject subject); Indica um status para o WebSphere Application Server, o ID do usuário ou o ID exclusivo para o usuário e um Assunto customizado. Se o Assunto contiver uma Hashtable, o proprietário será ignorado. O conteúdo do Assunto se torna parte do Assunto do usuário eventual.
    public String getVersion();
    Este método retorna o número da versão da implementação TAI atual.
    public String getType();
    O valor de retorno deste método é dependente de implementação.
  3. Compile a implementação depois de tê-la implementado. Por exemplo: /opt/WebSphere/AppServer/java/bin/javac -classpath /opt/WebSphere/AppServer/plugins/com.ibm.ws.runtime_1.0.0.jar;/opt/WebSphere/AppServer/dev/JavaEE/j2ee.jar;/opt/WebSphere/AppServer/plugins/com.ibm.ws.sip.container_1.0.0.jar myTAIImpl.java
    1. Para cada servidor dentro de um cluster, copie o arquivo de classe para um local no caminho de classe da WebSphere (preferivelmente o diretório WASProductDir/plugin/).
    2. Reinicialize todos os servidores.
  4. Exclua o interceptor padrão do WebSEAL do console administrativo e clique em Novo para adicionar seu interceptor personalizado. Verifique se o nome da classe é separado por pontos e aparece no caminho da classe.
  5. Clique no link Propriedades Customizadas para adicionar propriedades adicionais requeridas para inicializar o interceptor customizado. Essas propriedades são transmitidas ao método initialize(Properties properties) da sua implementação quando excede o com.ibm.websphere.security.WebSphereBaseTrustAssociationInterceptor conforme descrito na etapa anterior.
  6. Salve e sincronize (se aplicável) a configuração.
  7. Inicie os servidores novamente para que o interceptor customizado tenha efeito.

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsip_devctai
Nome do arquivo: tsip_devctai.html