Implementieren eines Passwort-Digests für ws-security UsernameToken in Java
Ich versuche, von einem Server, der dies von Haus aus leider nicht unterstützt, einen ws-security-gesicherten Webservice aufzurufen. Der Ansatz, den ich gewählt habe, besteht darin, eine .jsp-Datei zu implementieren, die als Reverse-Proxy für die eigentliche Endpunkt-URL fungiert und dabei das Element mit ws-security-Elementen hinzufügt.
Dies scheint recht gut zu funktionieren und ich bin zuversichtlich, dass ich das XML korrekt mit den richtigen Namespaces usw. erstellt habe. Dies habe ich durch Vergleichen des XML mit dem von SOAP-UI erzeugten XML überprüft.
Das Problem liegt in der Implementierung des Kennwort-Digest-Generators. Ich erhalte nicht das gleiche Ergebnis wie SOAP-UI, wenn die gleichen Eingaben für NOnce, xsd: dateTime und password sowie der folgende Code verwendet werden.
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"));
Ich denke, das Problem liegt in der Implementierung des Hashings der ersten beiden Elemente, wie von erklärthttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf
Beachten Sie, dass das Nonce mithilfe der Oktettsequenz seines dekodierten Werts gehasht wird, während der Zeitstempel mithilfe der Oktettsequenz seiner UTF8-Kodierung gehasht wird, wie im Inhalt des Elements angegeben.
Wenn mir jemand helfen könnte, dieses Problem zu lösen, wäre das großartig, denn es macht mich langsam verrückt! Es wäre ideal, wenn Sie Quellcode bereitstellen könnten.