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.
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.
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.
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.
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
}
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.