具有NTLM身份验证的SOAP Web服务的Java客户端

时间:2011-08-02 11:52:33

标签: java axis2 cxf ntlm

我花了很多天时间试图找到一个可以连接到使用Negotiate / NTLM身份验证的Microsoft Dynamics CRM的正确Java框架。我使用各种HTTP协议处理程序,使用JAX-WS,Axis2,CXF尝试了Stackoverflow和其他资源上的所有现有建议。没有人像预期的那样工作。目前最好的方法是Axis2 / commons-httpclient-3.1,我可以使用NTLM摘要跟踪至少所有三个阶段,但目标IIS仍然拒绝使用401 Unauthorized进行身份验证。 Apache CXF - 有内置的Java6 NTLM支持和jCIFS,有些人建议作为补救措施,不能正常工作,因为前者在第二个401响应失败(而它本应该发送第三个请求,根据协议),后者尝试从空输入流中读取响应代码并失败。

那么,问题是是否有人成功地从Java 6平台掌握了受NTLM保护的SOAP Web服务?

2 个答案:

答案 0 :(得分:1)

我希望其他人会参与其中,因为我对这个领域的了解现在已有几年了,也许不是最好的建议 - 特别是,我只使用了commons-httpclient 3而没有更新的包承诺正确地做NTLM / NTLMv2。

正如您可能已经注意到的,commons-httpclient 3的NTLM身份验证代码仅支持NTLM,而不支持较新的NTLMv2协议。我对此问题的解决方案是使用commons-httpclient 3并将NTLM身份验证代码替换为支持NTLMv2的解决方案。幸运的是,NTLMv2规范是published by Microsoft。老实说,实施起来并不困难,但当然现在你必须自己维护一些可能由于多种原因而不可取的东西。

答案 1 :(得分:0)

我忘记说我自己确实找到了解决方案。线索是用Jespa + jCIFS替换标准Java协议栈,并制作一些小补丁以使用JAX-WS。