Crie um token de segurança SAML que contém um método de confirmação de assunto holder-of-key, por exemplo: WSSFactory factory = WSSFactory.getInstance();
// Inicializar WSSGenerationContext
com.ibm.websphere.wssecurity.wssapi.WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Inicializar a configuração do emissor SAML por meio das propriedades customizadas
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); //Add custom properties
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");
A chave de prova integrada no token de segurança SAML é criptografada para o
serviço da Web de destino. A chave pública do serviço de destino que criptografa a chave de prova
é especificada pela propriedade SamlConstants.SERVICE_ALIAS, que especifica um
certificado público no arquivo de confiança. O local do arquivo de confiança é
especificado por uma propriedade customizada com.ibm.websphere.wssecurity.wssapi.WSSGenerationContext. Nesse exemplo, você deve importar o arquivo de políticas Java Cryptography Extension (JCE) porque a criptografia usa um tamanho de chave de 256 bits. Para obter informações adicionais, leia sobre como usar os arquivos de políticas JCE irrestritas no tópico "Ajustando Aplicativos de Segurança de Serviços da Web".
Se preferir usar chaves derivadas para assinatura digital e para criptografia em vez de usar a chave
simétrica diretamente, inclua o seguinte par nome-valor:
map.put(SamlConstants.REQUIRE_DKT, "true");