Implementando el resumen de contraseña para ws-security UsernameToken en Java
Estoy intentando realizar una llamada a un servicio web seguro ws-security desde un servidor que desafortunadamente no lo admite de forma nativa. El enfoque que he tomado es implementar un .jsp que actúa como proxy inverso a la URL del punto final real, en el proceso de agregar el elemento con los elementos de seguridad ws.
Esto parece estar funcionando bastante bien y estoy seguro de que he construido el XML correctamente con los espacios de nombres correctos, etc. Lo he verificado comparando el XML con el XML producido por SOAP-UI.
El problema está en la implementación del generador de compendio de contraseñas. No obtengo el mismo resultado que SOAP-UI usando las mismas entradas para NOnce, xsd: dateTime y contraseña, y el siguiente código.
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"));
Creo que el problema es con la implementación del hashing de los dos primeros elementos como se explica enhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf
Tenga en cuenta que el nonce se procesa utilizando la secuencia de octetos de su valor decodificado, mientras que la marca de tiempo se procesa utilizando la secuencia de octetos de su codificación UTF8 como se especifica en el contenido del elemento.
¡Si alguien pudiera ayudarme a resolver este problema, sería genial porque está empezando a volverme loco! Sería ideal si pudiera proporcionar el código fuente.