我必須實現一個使用外部合作伙伴服務的JAX-WS-Client。我使用Apache CXF。該服務在wsdl中定義了兩個用於身份驗證的WS-Policies - KerberosToken和UsernameToken。由於該服務來自外部合作伙伴,因此無法更改。JAX-WS客戶端CXF WS-Policy問題
問題:身份驗證在Kerberos身份驗證失敗,因爲我想使用 簡單的UsernameToken身份驗證。
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一個)的本政策正在滿載轉移。但是CXF甚至沒有嘗試填充UsernameToken - Policy。
如果我刪除-Block for KerberosToken身份驗證正常工作,但在生產中這是不可能的。
任何提示?如果在wsdl或我的方法中有錯誤,請告訴我。請詳細說明 - 我是這個領域的noob。
在此先感謝!
感謝Colm O hEigeartaigh! 有沒有辦法告訴客戶忽略這些政策,只發送一個UsernameToken-Request? 由於服務器端由外部合作伙伴定義,因此我無法收緊策略。 –
這可能會幫助你:http://cxf.apache.org/ws-policy-framework.html。默認情況下,第一個策略選擇被選中,但可能有一種方法來配置它。 –
Thx Colm O hEigeartaigh!我會看看它。 除此之外,我找到了一種解決方法。也許你可以給這個解決方法一些優點或缺點。 –