我正在使用 Apache CXF + Spring 开发代码优先的 WebService。我的 Web 服务希望 UsernameToken 出现在 SOAP 请求标头中,以便对调用客户端进行身份验证。我的问题是,有没有办法在 Java 代码或配置文件的某处添加 SOAP 安全标头(UsernameToken)定义,所以生成的 WSDL 将包含安全性(UsernameToken)?请指教。
非常感谢 :)
我正在使用 Apache CXF + Spring 开发代码优先的 WebService。我的 Web 服务希望 UsernameToken 出现在 SOAP 请求标头中,以便对调用客户端进行身份验证。我的问题是,有没有办法在 Java 代码或配置文件的某处添加 SOAP 安全标头(UsernameToken)定义,所以生成的 WSDL 将包含安全性(UsernameToken)?请指教。
非常感谢 :)
可以使用 WS-Policies 在 WSDL 中发布有关所需令牌的信息。对于用户名令牌,我使用以下策略:
<wsp:Policy wsu:Id="UP_policy" xmlns:wsp="http://www.w3.org/ns/ws-policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<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:WssUsernameToken11 />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:Policy>
它仅对请求消息 ( AlwaysToRecipient
) 需要 UT。要在生成的 WSDL 中包含此类策略:
ut.policy.xml
@Policies({ @Policy(uri = "ut.policy.xml") })
注释我修改了示例 CXF 项目。它显示了如何做到这一点。你可以在这里找到它。
因此,您的 WSDL 将附加适当的 WS-SecurityPolicy 实例,告诉客户端需要用户名令牌:
<wsdl:definitions ...>
...
<wsdl:service name="GreeterService">
<wsdl:port binding="tns:GreeterServiceSoapBinding" name="GreeterPort">
<soap:address location="http://localhost:9000/SoapContext/GreeterPort"/>
</wsdl:port>
<wsp:PolicyReference URI="#UP_policy"/>
</wsdl:service>
<wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" wsu:Id="UP_policy">
<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:WssUsernameToken11/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:Policy>
</wsdl:definitions>
可以在此处找到有关使用 CXF 配置 WS-SecurityPolicy 的更多信息以及如何在此处处理任何 WS- Policy。