残念ながら、これをネイティブでサポートしていないサーバーから ws-security で保護された Web サービスを呼び出そうとしています。私が採用したアプローチは、ws-security 要素を含む要素を追加するプロセスで、実際のエンド ポイント URL へのリバース プロキシとして機能する .jsp を実装することです。
これは非常にうまく機能しているようで、正しい名前空間などを使用して XML を正しく構築したと確信しています。XML と SOAP-UI によって生成された XML を比較して、これを確認しました。
問題は、パスワード ダイジェスト ジェネレーターの実装にあります。NOnce、xsd:dateTime、パスワード、および次のコードに同じ入力を使用して SOAP-UI が行うことと同じ結果が得られません。
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"));
問題は、 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdfで説明されているように、最初の 2 つの要素のハッシュを実装することにあると思います
ナンスは、デコードされた値のオクテット シーケンスを使用してハッシュされますが、タイムスタンプは、要素の内容で指定された UTF8 エンコーディングのオクテット シーケンスを使用してハッシュされることに注意してください。
誰かがこの問題を解決するのを手伝ってくれたら、それは素晴らしいことです。なぜなら、それは私を狂わせ始めているからです! ソースコードを提供していただけると理想的です。