在Mule ESB中使用Windows凭据的CXF端点

时间:2011-12-14 11:43:32

标签: cxf ntlm esb ws-security mule

我有一个工作骡子到我使用的C#服务端点。

服务托管在WCF / C#上 - mule使用apache cxf(Wsdl2java)生成的一组类向该服务开放客户端。 但是,到目前为止,我所使用的只是服务上的基础知识 - 意味着没有安全/凭证验证。

现在 - 我想改变这一点。我想将c#服务的绑定设置为WSHttpBinding。

有没有办法可以使用NTLM Credentials消费c#服务?

当前端点定义为:

<cxf:jaxws-client serviceClass="com.TimeLineListener.IBusListeningService" 
            operation="getMessage" /> 
                <outbound-endpoint address="${TMSService.host}"
            exchange-pattern="one-way" />

来自Apache CXF'S DOcumentation:

NTLM身份验证

 //Set the jcifs properties
    jcifs.Config.setProperty("jcifs.smb.client.domain", "ben.com");
    jcifs.Config.setProperty("jcifs.netbios.wins", "xxx.xxx.xxx.xxx");
    jcifs.Config.setProperty("jcifs.smb.client.soTimeout", "300000"); //5
    minutes
    jcifs.Config.setProperty("jcifs.netbios.cachePolicy", "1200"); //20 minutes
    //jcifs.Config.setProperty("jcifs.smb.client.username", "myNTLogin");
    //jcifs.Config.setProperty("jcifs.smb.client.password", "secret");

    //Register the jcifs URL handler to enable NTLM
    jcifs.Config.registerSmbURLHandler();

Finally, you need to setup the CXF client to turn off chunking. The reason is that the NTLM authentication requires a 3 part handshake which breaks the streaming. 

//Turn off chunking so that NTLM can occur
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);

那么,我如何在上面的XML中定义这些项?我还没有看到任何这样的例子......

并且addtionaly,即使我尝试设置没有安全性的连接(WSHttpBinding with Security = none) - 我仍然无法让它工作,因为内容类型不匹配(假设是application / xml,它是text / xml或类似的东西)

我真的想要一些关于如何实现这一目标的例子。

谢谢(再次)!

1 个答案:

答案 0 :(得分:0)

我不确定你能不能。我最近试图让Mule使用Kerberos身份验证与Microsoft(Dynamics 2011)Web服务进行通信,但没有成功。我相信这是因为Mule使用的是CXF 2.3.1,它不支持这种形式的身份验证。

在联系Mulesoft了解解决方案或解决方法后,我收到了回复:

  

我们不支持Kerberos身份验证,因为我们使用此库的方式,升级到cxf 2.5.0无法解决问题。唯一的解决方案是扩展Http transort的功能来处理这个问题。

我们现在的解决方案是拥有一个单独的CXF 2.5.0适配器,Mule通过JMS进行通信。