Puede solicitar un servicio de señales de seguridad (STS) externo para
emitir las señales SAML con el método de confirmación de sujeto holder-of-key con
la clave simétrica que está cifrada para un servicio de destino. Utilice el modelo de programación API de
Java™ para XML (JAX-WS) y las API de seguridad de servicios Web (WSS)
para completar esta tarea.
Antes de empezar
En esta tarea se presupone que está familiarizado con el modelo
de programación JAX-WS, las interfaces de las API de WSS, los conceptos de SAML
y el uso de conjuntos de políticas para configurar y administrar los valores
de servicios web.
Complete las acciones siguientes antes de iniciar esta tarea:
- Consulte información sobre propagación de señales holder-of-key SAML con
clave simétrica utilizando las API de WSS.
- Familiarícese con el uso de materiales clave incluidos en las señales SAML
para la protección de mensajes utilizando las API de WSS. El caso de ejemplo
requiere solicitar señales SAML de un STS externo en lugar de utilizar las señales
SAML autoemitidas.
- Consulte la información sobre solicitud de señales SAML sender-vouches
desde un STS externo para propagar mediante las API de
WSS con protección a nivel de mensaje.
- Consulte la información sobre solicitud de señales SAML sender-vouches
desde un STS externo para propagar mediante las API de
WSS con protección a nivel de transporte.
- Consulte información sobre solicitud de señales de transporte SAML desde
un STS externo para propagarlas utilizando las API de WSS con protección a nivel de transporte.
- Familiarícese con el acceso a un STS externo utilizando las API de WSS.
Acerca de esta tarea
Esta tarea muestra el código de ejemplo para solicitar las señales SAML desde un STS externo,
con el método de confirmación de sujeto holder-on-key y la clave simétrica incluida que está cifrada
para el servicio de destino mediante las API de WSS. Esta tarea se centra en enviar un mensaje de solicitud
WS-Trust a un STS externo para solicitar señales SAML holder-of-key con claves simétricas.
Procedimiento
- Especifique un STS desde el que solicitar una señal de seguridad SAML que contiene
el método de confirmación de sujetos holder-of-key; por ejemplo:
com.ibm.websphere.wssecurity.wssapi.WSSFactory factory =
com.ibm.websphere.wssecurity.wssapi.WSSFactory.getInstance();
WSSGenerationContext gencont1 = factory.newWSSGenerationContext();
WSSConsumingContext concont1 = factory.newWSSConsumingContext();
HashMap<Object, Object> cbackMap1 = new HashMap<Object, Object>();
cbackMap1.put(SamlConstants.STS_ADDRESS, "https://www.example.com/sts"); //URL del STS
cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService"); //Servicio de destino
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_SOAP_VERSION, "1.1");
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_WSTRUST_NAMESPACE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512");
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_COLLECTION_REQUEST,
"true"); //RST o RSTC
cbackMap1.put(SamlConstants.TOKEN_TYPE,
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0");
cbackMap1.put(SamlConstants.CONFIRMATION_METHOD, "holder-of-key");
Para solicitar una señal de seguridad SAML holder-of-key del STS, debe especificar
si se va a incluir una clave simétrica o una clave pública por medio de un elemento
KeyType en una solicitud de confianza. Este ejemplo requiere un tipo de clave
simétrica como se muestra en el paso siguiente.
- Especifique la clave simétrica que se va a incluir en las señales de seguridad SAML; por ejemplo:
cbackMap1.put(SamlConstants.KEY_TYPE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey");
SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
cbHandler1.setWSSConsumingContextForTrustClient(concont1);
cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class,
cbHandler1, "system.wss.generate.saml");
La señal SAML solicitada contiene una clave simétrica que está cifrada para el servicio de destino.
El STS también devuelve el cifrado de claves simétricas a través del elemento
WS-Trust RequestedProofToken.
Consideremos el ejemplo siguiente.
<wst:RequestedProofToken>
<wst:BinarySecret
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="_27325D34CE4BCC83141288966548620">n68rFQba+XTZLNBfEc4prg==</wst:BinarySecret>
</wst:RequestedProofToken>
El elemento RequestedProofToken se muestra aquí a modo informativo. El proceso detallado
no se expone a los usuarios de las API de WSS. El entorno de ejecución de seguridad de servicios Web o más
precisamente el elemento SAMLGenerateLoginModule que se especifica en la configuración de
inicio de sesión JAAS system.wss.geenrate.saml manejan el elemento RequestedProofToken
y la clave simétrica.
Resultados
Ha obtenido información sobre los bloques de creación clave para solicitar las señales SAML
con el método de confirmación de sujetos holder-of-key y la clave simétrica de un STS externo mediante
las API de WSS. Para utilizar la señal SAML con el fin de firmar los mensajes de solicitud, revise
el código de ejemplo del tema "Propagación de señales holder-of-key SAML autoemitidas
con clave asimétrica mediante las API de WSS".