Pergunta

Eu tenho um cliente Soap e também um servidor Soap, ambos usando CXF.A assinatura de mensagens está funcionando corretamente.Quando aponto meu cliente Soap para um servidor SOAP diferente usando um dispositivo IBM SOAP, as mensagens de resposta contêm o elemento SignatureConfirmation.Quero garantir que meu servidor SOAP baseado em CXF forneça os mesmos resultados que os servidores SOAP de terceiros. Então, como configuro meu servidor para ativar esse elemento?

Aqui está como eu configuro meu servidor:

signingProps.put(WSHandlerConstants.ACTION, "Timestamp Signature"); 
signingProps.put(WSHandlerConstants.SIGNATURE_PARTS, "{}{http://schemas.xmlsoap.org/soap/envelope/}Body ;" 
      + "{}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}" 
      + "Timestamp"); 
signingProps.put(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial"); 

Properties keyStoreProps = new Properties(); 
keyStoreProps.put(LocalCryptoProvider.WS_CRYPTO_PROVIDER, 
    LocalCryptoProvider.class.getName()); 
keyStoreProps.put(LocalCryptoProvider.KEYSTORE_OBJECT, keyStore); 

WSS4JOutInterceptor outSigner = new WSS4JOutInterceptor(signingProps); 
cxfFactory.getOutInterceptors().add(new SAAJOutInterceptor()); 
cxfFactory.getOutInterceptors().add(outSigner); 
Foi útil?

Solução 2

Encontrei a resposta certa.

No mapa de propriedades passado para WSS4JOutInterceptor e WSS4JInInterceptor adicione ENABLE_SIGNATURE_CONFIRMATION, ou seja,

signingProps.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true" );

Isso precisa ser definido no cliente e no servidor ou não funcionará.Além disso, se você ativar a confirmação de assinatura no cliente, mas não no servidor, o cliente lançará uma exceção.

Outras dicas

A ação deverá ser "enableSignatureConfirmation" que se encarregará de adicionar o elemento de confirmação de assinatura à resposta.

signingProps.put(WSHandlerConstants.ACTION, "enableSignatureConfirmation");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top