WSS4J / camel cxf(Https)的基本身份验证

时间:2014-10-15 12:27:25

标签: java web-services soap basic-authentication wss4j

对于SOAP Web服务,我通过PasswordDigestcamel-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>

如果有人在这里有一些指导,我们将不胜感激。

2 个答案:

答案 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