外部パートナーからのサービスを使用するJAX-WS-Clientを実装する必要があります。私はApache CXFを使用します。このサービスは、wsdl - KerberosTokenとUsernameTokenの認証用に2つのWS-Policyを定義しています。サービスは外部パートナーからのものであるため変更できません。JAX-WSクライアントCXF WS-Policyの問題
問題:簡単なUsernameToken認証を としたいので、Kerberos認証で認証が失敗します。
WSLD-ポリシー - パート:
CXF-エンドポイントでユーザー名/パスワードの設定<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="SecurityServiceUsernameUnsecureTransportPolicy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssGssKerberosV5ApReqToken11/>
</wsp:Policy>
</sp:KerberosToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
<wsp:All>
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
:
public void addAuthenticationProperties(Endpoint endpoint) {
endpoint.put(SecurityConstants.USERNAME, userName);
endpoint.put(SecurityConstants.PASSWORD, password);
}
私は-Tagの意味を理解すると、もしあれば(excatly 1)本のことポリシーは満場一致で実行されます。しかし、CXFはUsernameToken - Policyをフルフィルにしようとしません。
KerberosToken認証用の-Blockを削除しても問題なく動作しますが、これは不可能です。
ヒントwsdlまたは私のアプローチでエラーが発生した場合は、私に知らせてください。そして、詳細を述べてください - 私はこの分野のノブです。
ありがとうございます!
Thanks Colm O hEigeartigh! このポリシーを無視してUsernameToken-Requestを送信するようにクライアントに指示する方法はありますか? サーバー側が外部パートナーによって定義されているため、ポリシーを強化できません。 –
これはあなたを助けるかもしれません:http://cxf.apache.org/ws-policy-framework.html。デフォルトでは、最初のポリシーの選択肢が選択されていますが、これを設定する方法があるかもしれません。 –
Thx Colm O hEigeartigh!私はそれを調べるでしょう。 これ以外にも回避策が見つかりました。おそらく、あなたはこの回避策にいくつかの賛否両論を与えることができます。 –