Propagação de Tokens SAML Usando a API

A função de propagação do SAML é útil para aplicativos que interagem nos diversos servidores. O recurso de propagação comunica informações do token do recebimento de dados do servidor original para outros servidores.

É possível propagar tokens SAML usando comandos administrativos, ou programaticamente, usando a interface de programação de aplicativos (API) SAML. A propagação por meio de comandos administrativos é discutida nos tópicos Propagando Tokens SAML e Métodos de Propagação de Tokens SAML.

A propagação programática de tokens SAML é obtida por meio de uma combinação de programação e uso explícitos do ambiente de tempo de execução do Web Services Security. Por exemplo, é possível extrair o SAMLToken do objeto org.apache.axis2.jaxws.BindingProvider. O token é então usado para chamadas de saída. Neste exemplo, como a segurança do WebSphere não é necessária, a propagação programática do token SAML permite explorar a segurança SAML no nível do aplicativo. Além disso, o token SAML pode ser comunicado no recebimento de dados usando qualquer protocolo.

Use o seguinte código de amostra para extrair o SAMLToken no lado do cliente após a conclusão do primeiro pedido.

Crie um objeto Dispatch e chame o pedido:
javax.xml.ws.Dispatch dispatch = ...;
dispatch.invoke();
Obtenha um contexto de resposta e extraia o SAMLToken:
Map<String, Object> responseContext = dispatch.getResponseContext();
 		SAMLToken samlToken = 
       (SAMLToken ) responseContext.get(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
    SAMLTOKEN_OUT_MESSAGECONTEXT);

O código de amostra a seguir mostra como reusar um SAMLToken para solicitações de serviços da Web subsequentes.

O programa cliente de serviços da Web cria uma instância de despacho para chamar um serviço:
javax.xml.ws.Dispatch dispatch = ...;
O cliente de serviços da Web usa então esse código para passar um SAMLToken para o manipulador do Web Services Security:
Map<String, Object> requestContext = dispatch.getRequestContext();
     requestContext.put(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
     SAMLTOKEN_IN_MESSAGECONTEXT, samlToken);           

O provedor de serviços da Web (recebedor) pode usar o seguinte código para extrair um SAMLToken de uma solicitação de serviços da Web recebida.

Extraia um SAMLToken do requestContext:
Subject subject = (Subject) context.get(com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_TOKEN_WSSSUBJECT);
SAMLToken samlToken = null;
try {
  samlToken = (SAMLToken) AccessController.doPrivileged(
    new java.security.PrivilegedExceptionAction() {
      public Object run() throws java.lang.Exception {
        final java.util.Iterator authIterator = 
           subject.getPrivateCredentials(SAMLToken.class).iterator();

        if ( authIterator.hasNext() ) {
          final SAMLToken token = (SAMLToken) 
          authIterator.next();
          return token;
        }
        return null;
      }
    });
} catch (Exception ex) {
  // Error handling
}
  
Extraia os atributos SAML:
List<SAMLAttribute> allAttributes;
allAttributes = ((SAMLToken) samlToken).getSAMLAttributes();

O ambiente de tempo de execução do cliente de serviços da Web pode armazenar em cache o token SAML. Em pedidos do cliente subsequentes no aplicativo, o ambiente de tempo de execução de segurança recupera o token SAML do cache para uso com o destino.


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



Í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=cwbs_samlapipropagate
Nome do arquivo: cwbs_samlapipropagate.html