Implementando o digest da senha para ws-security UsernameToken em Java

Eu estou tentando fazer uma chamada para um ws-security webservice seguro de um servidor que infelizmente não suporta isso nativamente. A abordagem que tomei é implementar um .jsp que atua como proxy reverso para o URL do ponto final real, no processo de adição do elemento com elementos de segurança ws.

Isso parece estar funcionando muito bem e tenho certeza de que construí o XML corretamente com os namespaces corretos, etc. Verifiquei isso comparando o XML com o XML produzido pelo SOAP-UI.

O problema está na implementação do gerador de digest de senha. Eu não obtenho o mesmo resultado que o SOAP-UI faz usando as mesmas entradas para NOnce, xsd: dateTime e password, e o código a seguir.

StringBuffer passwordDigestStr_ = new StringBuffer();

// First append the NOnce from the SOAP header
passwordDigestStr_.append(Base64.decode("PzlbwtWRpmFWjG0JRIRn7A=="));

// Then append the xsd:dateTime in UTC timezone
passwordDigestStr_.append("2012-06-09T18:41:03.640Z");

// Finally append the password/secret
passwordDigestStr_.append("password");

System.out.println("Generated password digest: " + new String(com.bea.xbean.util.Base64.encode(org.apache.commons.codec.digest.DigestUtils.sha(passwordDigestStr_.toString())), "UTF-8"));

Eu acho que o problema é com a implementação do hashing dos dois primeiros elementos, conforme explicadohttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf

Note que o nonce é hash usando a seqüência de octetos do seu valor decodificado, enquanto o timestamp é codificado usando a seqüência de octetos da sua codificação UTF8, conforme especificado no conteúdo do elemento.

Se alguém pudesse me ajudar a resolver esse problema que seria ótimo porque está começando a me deixar louco! Seria ideal se você pudesse fornecer o código-fonte.

questionAnswers(2)

yourAnswerToTheQuestion