对于SOAP Web服务,我通过PasswordDigest
和camel-cxf
提供了WSS4J
身份验证配置的工作示例:
<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>
如果有人在这里有一些指导,我们将不胜感激。
答案 0 :(得分:0)
您正在混合使用两种不同的方式在CXF中配置WS-Security。
当您使用WS-SecurityPolicy配置安全性时,将使用“PolicyBasedWSS4JInInterceptor”。您根本不需要实际添加它,因为CXF会自动将其添加到拦截器链中。它通过此处指定的配置标签进行配置:http://cxf.apache.org/docs/ws-securitypolicy.html。对于安全策略案例,将忽略您指定为“属性”的配置标记。
如果要在这种情况下通过策略配置安全性,如果要支持明文密码,则需要删除“HashPassword”策略。
如果您只想通过“操作”进行配置,则应使用“WSS4JInInterceptor”(基于策略的拦截器扩展)。
科尔姆。
答案 1 :(得分:0)
需要将WSS-PasswordType从PasswordText
更改为PasswordDigest
。