【发布时间】:2023-08-28 02:17:02
【问题描述】:
我必须实现一个使用来自外部合作伙伴的服务的 JAX-WS-Client。我使用 Apache CXF。该服务在 wsdl 中定义了两个用于身份验证的 WS-Policies - KerberosToken 和 UsernameToken。由于服务来自外部合作伙伴,因此无法更改。
问题:Kerberos-Authentication 的身份验证失败,因为我想使用 简单的 UsernameToken-Authentication。
WSLD-策略部分:
<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>
在 CXF-Endpoint 设置用户名/密码:
public void addAuthenticationProperties( Endpoint endpoint ) {
endpoint.put( SecurityConstants.USERNAME, userName );
endpoint.put( SecurityConstants.PASSWORD, password );
}
据我了解,-Tag 意味着,如果此政策中的任何一项(特别是一项)已完成,请继续前进。但 CXF 甚至不会尝试填写 UsernameToken - Policy。
如果我删除 KerberosToken 身份验证的 -Block 可以正常工作,但在生产中这是不可能的。
有什么提示吗?如果 wsdl 或我的方法有错误,请告诉我。请详细说明 - 我是这个领域的菜鸟。
提前致谢!
【问题讨论】:
标签: authentication cxf jax-ws policy