对于SOAP web服务,我有一个通过camel-cxf
和WSS4J
:进行PasswordDigest
身份验证的配置示例
<camel-cxf:cxfEndpoint id="myService"
address="${ws.endpoint.address}"
serviceName="es:MyService"
wsdlURL="wsdl/myservice.wsdl"
endpointName="es:MyServicePort"
serviceClass="com.us.MyServiceEndpoint"
xmlns:es="http://us.com/services/MyService">
<camel-cxf:inInterceptors>
<bean class="org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JInInterceptor">
<property name="properties">
<map>
<entry key="action" value="UsernameToken"/>
<entry key="passwordType" value="PasswordDigest"/>
<entry key="passwordCallbackRef" value-ref="myPasswordCallback"/>
</map>
</property>
</bean>
</camel-cxf:inInterceptors>
</camel-cxf:cxfEndpoint>
我们有一个请求,要为BASIC身份验证启用相同的资源-如何修改此配置?
我更改了以下行,并通过SOAP UI进行了测试:
<entry key="passwordType" value="PasswordText"/>
然而,结果是来自UsernameTokenValidator.java
:的SOAP故障
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}
UsernameToken: Password hashing policy not enforced</faultstring>
</soap:Fault>
如果有人能在这里提供一些指导,我们将不胜感激。
您混淆了在CXF中配置WS-Security的两种不同方法。
当您具有用于配置安全性的WS-SecurityPolicy时,将使用"PolicyBasedWSS4JInInterceptor"。您根本不需要实际添加它,因为CXF会自动将它添加到拦截器链中。它通过此处指定的配置标签进行配置:http://cxf.apache.org/docs/ws-securitypolicy.html.对于安全策略案例,将忽略您指定为"属性"的配置标记。
如果您想在这种情况下通过策略配置安全性,如果您想支持明文密码,则需要删除"HashPassword"策略。
如果您只想通过"操作"进行配置,则应该使用"WSS4JInInterceptor"(基于策略的拦截器扩展了它)。
Colm。
PasswordText
更改为PasswordDigest
。