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 sujetos holder-of-key con una clave pública en un certificado x.509
con el modelo de programación JAX-WS (API de Java™ para servicios web XML)
y las API de WSS (seguridad de servicios web).
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 autoemitidas
con clave asimétrica mediante 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 la información sobre solicitud de señales SAML bearer desde un STS externo,
que puede propagar mediante las API de WSS con protección a nivel de
transporte.
- Familiarizarse 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 con el método de
confirmación de sujetos holder-of-key y la clave pública incorporada en un certificado x.509 utilizando
las API de WSS, desde un STS externo. Esta tarea se centra en el envío de un certificado X.509 a un
STS externo cuando se solicitan señales holder-of-key de SAML.
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");
cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService");
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 el método de confirmación de sujetos holder-of-key, debe especificar si
se incluye una clave pública o una clave simétrica en las señales SAML. En este
ejemplo se especifica un tipo de clave pública. A continuación, especifica la ubicación
de un certificado que contiene la clave pública y la ubicación de la correspondiente
clave privada para que el remitente firme digitalmente los elementos de mensajes SOAP con
el fin de satisfacer los requisitos de confirmación de sujetos holder-of-key.
- Especifique la ubicación de un certificado X.509 para incluir en las señales SAML y una clave
privada correspondiente para utilizarla para firmar digitalmente los elementos de mensajes; por ejemplo:
cbackMap1.put(SamlConstants.KEY_TYPE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey");
cbackMap1.put(SamlConstants.KEY_ALIAS, "soapinitiator" );
cbackMap1.put(SamlConstants.KEY_NAME, "CN=SOAPInitator, O=Example");
cbackMap1.put(SamlConstants.KEY_PASSWORD, "myinitatkeypass");
cbackMap1.put(SamlConstants.KEY_STORE_PATH, "keystores/initiator.jceks");
cbackMap1.put(SamlConstants.KEY_STORE_PASSWORD, "myinitatstorepass");
cbackMap1.put(SamlConstants.KEY_STORE_TYPE, "jceks");
SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
cbHandler1.setWSSConsumingContextForTrustClient(concont1);
cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class,
cbHandler1, "system.wss.generate.saml");
El certificado X.509 especificado se envía en solicitudes WS-Trust al STS externo
en el elemento trust:UseKey. Para obtener más información sobre las
aserciones SAML definidas en el perfil de señales SAML estándar. SSL se utiliza para
proteger la integridad y la confidencialidad de los mensajes de solicitud y respuesta
de WS-Trust en este ejemplo.
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 asimé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, familiarícese
con 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".