Implementacja skrótu hasła dla ws-security UsernameToken w Javie

Próbuję wywołać zabezpieczoną usługę internetową ws-security z serwera, który niestety nie obsługuje tego natywnie. Podejście, które podjąłem, polega na zaimplementowaniu .jsp, który działa jako odwrotne proxy do rzeczywistego adresu URL punktu końcowego, w procesie dodawania elementu z elementami ws-security.

Wydaje się, że działa to całkiem dobrze i jestem przekonany, że poprawnie skonstruowałem XML z poprawnymi przestrzeniami nazw itp. Sprawdziłem to, porównując XML z XML wyprodukowanym przez SOAP-UI.

Problem polega na wdrożeniu generatora skrótu haseł. Nie uzyskuję tego samego wyniku, co interfejs SOAP-UI, używając tych samych danych wejściowych dla NOnce, xsd: dateTime i hasła oraz następującego kodu.

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"));

Myślę, że problem polega na implementacji mieszania dwóch pierwszych elementów, jak wyjaśniono whttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf

Zauważ, że wartość nonce jest mieszana przy użyciu sekwencji oktetu jej zdekodowanej wartości, podczas gdy znacznik czasu jest mieszany przy użyciu sekwencji oktetu kodowania UTF8, jak określono w zawartości elementu.

Gdyby ktoś pomógł mi rozwiązać ten problem, byłby świetny, ponieważ zaczyna mnie doprowadzać do szału! Byłoby idealnie, gdybyś mógł dostarczyć kod źródłowy.

questionAnswers(2)

yourAnswerToTheQuestion