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



对于SOAP web服务,我有一个通过camel-cxfWSS4J:进行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。

需要将WSS密码类型从PasswordText更改为PasswordDigest

相关内容

最新更新