Propagación de señales SAML mediante la API
La función de propagación de SAML es útil para las aplicaciones que interactúan en varios servidores. La característica de propagación comunica la información de señales del servidor de origen descendente a otros servidores.
La propagación mediante programación de señales SAML se lleva a cabo a través de una combinación de programación explícita y el uso del entorno de ejecución de la seguridad de los servicios Web. Por ejemplo, puede extraer SAMLToken del objeto org.apache.axis2.jaxws.BindingProvider. La señal se utiliza, a continuación, para las llamadas de salida. En este ejemplo, puesto que la seguridad de WebSphere no es obligatoria, la propagación mediante programación de la señal SAML permite explotar la seguridad de SAML en el nivel de aplicación. Además, la señal SAML se puede comunicar en sentido descendente con cualquier protocolo.
Utilice el código de ejemplo siguiente para extraer SAMLToken en el cliente después de que se lleve a cabo la primera solicitud.
javax.xml.ws.Dispatch dispatch = ...;dispatch.invoke();
Obtenga un contexto de respuesta y
extraiga SAMLToken:Map<String, Object> responseContext = dispatch.getResponseContext();
SAMLToken samlToken =
(SAMLToken ) responseContext.get(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
SAMLTOKEN_OUT_MESSAGECONTEXT);
El código de ejemplo siguiente muestra cómo reutilizar SAMLToken para las solicitudes de servicios web posteriores.
javax.xml.ws.Dispatch dispatch = ...;
El cliente de servicios web, a continuación, utiliza este código para pasar una SAMLToken al
manejador de seguridad de servicios Web: Map<String, Object> requestContext = dispatch.getRequestContext();
requestContext.put(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
SAMLTOKEN_IN_MESSAGECONTEXT, samlToken);
El proveedor de servicios web (receptor) puede utilizar el código siguiente para extraer SAMLToken de una solicitud de servicios web de entrada.
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) {
// Manejo de errores}
List<SAMLAttribute> allAttributes;
allAttributes = ((SAMLToken) samlToken).getSAMLAttributes();
El entorno de ejecución del cliente de servicios web puede almacenar en memoria caché la señal SAML. En las solicitudes de cliente posteriores dentro de la aplicación, el entorno de ejecución de seguridad recupera la señal SAML de la memoria caché para utilizarla con el destino.