Cree una señal de seguridad SAML que contiene el método de confirmación de sujetos holder-of-key; por ejemplo: WSSFactory factory = WSSFactory.getInstance();
// Inicializar WSSGenerationContext
com.ibm.websphere.wssecurity.wssapi.WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Inicializar la configuración del emisor de SAML mediante propiedades personalizadas
HashMap<Object, Object> customProps = new HashMap<Object,Object>();
customProps.put(SamlConstants.ISSUER_URI_PROP, "example.com");
customProps.put(SamlConstants.TTL_PROP, "3600000");
customProps.put(SamlConstants.KS_PATH_PROP, "keystores/saml-provider.jceks");
customProps.put(SamlConstants.KS_TYPE_PROP, "JCEKS");
customProps.put(SamlConstants.KS_PW_PROP, "{xor}LCswLTovPiws");
customProps.put(SamlConstants.KEY_ALIAS_PROP, "samlissuer");
customProps.put(SamlConstants.KEY_NAME_PROP, "CN=SAMLIssuer, O=EXAMPLE");
customProps.put(SamlConstants.KEY_PW_PROP, "{xor}NDomLz4sLA==");
customProps.put(SamlConstants.TS_PATH_PROP, "keystores/saml-provider.jceks");
customProps.put(SamlConstants.TS_TYPE_PROP, "JCEKS");
customProps.put(SamlConstants.TS_PW_PROP, "{xor}LCswLTovPiws");
gencont.add(customProps); //Añadir propiedades personalizadas
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put(SamlConstants.CONFIRMATION_METHOD, "holder-of-key");
map.put(SamlConstants.Token_REQUEST, "issue");
map.put(SamlConstants.TOKEN_TYPE, WSSConstants.SAML.SAML20_VALUE_TYPE);
map.put(SamlConstants.SAML_NAME_IDENTIFIER, "Alice");
map.put(SamlConstants.SIGNATURE_REQUIRED, "true");
map.put(SamlConstants.SERVICE_ALIAS, "soaprecipient");
map.put(SamlConstants.KEY_TYPE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey");
map.put(SamlConstants.SAML_APPLIES_TO, "http://localhost:9080/your_Web_service");
map.put(RequesterConfiguration.RSTT.ENCRYPTIONALGORITHM,
"http://www.w3.org/2001/04/xmlenc#aes256-cbc");
map.put(SamlConstants.KEY_SIZE, "256");
SAMLGenerateCallbackHandler callbackHandler = new
SAMLGenerateCallbackHandler(map);
SAMLToken samlToken = (SAMLToken) factory.newSecurityToken(SAMLToken.class,
callbackHandler, "system.wss.generate.saml");
La clave de prueba incluida en el símbolo de seguridad SAML está cifrada para el servicio web de destino.
La clave pública del servicio de destino que cifra la clave de prueba se indica mediante la propiedad
SamlConstants.SERVICE_ALIAS que especifica un certificado público en el archivo de confianza. La ubicación
del archivo de confianza se especifica mediante una propiedad personalizada com.ibm.websphere.wssecurity.wssapi.WSSGenerationContext.
En este ejemplo, debe importar el archivo de políticas JCE (Java Cryptography
Extension) porque el cifrado utiliza el tamaño de clave de 256 bits.
Para obtener más información, consulte al apartado sobre utilización de archivos de políticas JCE sin restricciones
del tema "Ajuste de aplicaciones de seguridad de servicios web".
Si prefiere utilizar claves derivadas para la firma digital y el cifrado en lugar de
utilizar la clave simétrica directamente, añada el siguiente par de nombre y valor:
map.put(SamlConstants.REQUIRE_DKT, "true");