使用NTLM身份验证的SOAP Web服务的Java客户端

5

我花费了许多天和夜晚尝试找到一个适合连接使用Negotiate/NTLM身份验证的Microsoft Dynamics CRM的Java框架。我尝试过Stackoverflow和其他资源中所有现有的建议,包括JAX-WS、Axis2、CXF以及各种HTTP协议处理程序。但这些方法都没有按照预期工作。目前最好的方法是使用Axis2/commons-httpclient-3.1,我可以追踪至少带有NTLM digest的三个阶段,但是目标IIS仍然拒绝进行401 Unauthorized身份验证。Apache CXF(内置Java6 NTLM支持)和jCIFS也无法解决问题,前者在第二次401响应时失败(根据协议应该发送第三个请求),而后者则尝试从空输入流中读取响应代码并失败。

因此,问题是是否有人成功地从Java 6平台上使用NTLM保护的SOAP Web服务?


请检查:CXF 应该支持 Kerberos 配置文件(请参见 KerberosTokenPolicyValidator)。否则,请检查 wss4j-kerberos 项目。 - dma_k
嗨!你解决了吗? - Ignacio Ocampo
是的。请参见https://dev59.com/4lnUa4cB1Zd3GeqPedcu#7274388 - Jiří Vypědřík
2个回答

1

我希望有人能够加入讨论,因为我对这个领域的了解已经几年了,也许不是最好的建议 - 特别是,我只使用过commons-httpclient 3,没有使用过任何承诺正确执行NTLM/NTLMv2的新包。

正如您可能已经注意到的那样,commons-httpclient 3的NTLM身份验证代码仅支持NTLM,而不支持较新的NTLMv2协议。 我解决这个问题的方法是使用commons-httpclient 3,并用支持NTLMv2的解决方案替换NTLM身份验证代码。 幸运的是,NTLMv2规范由Microsoft发布。 实现起来并不难,但当然现在你必须自己维护它,这可能出于许多原因而不可取。


请检查我上面的自我回答。 - Jiří Vypědřík

0

我忘了说我已经自己找到了解决方案。关键是用Jespa+jCIFS替换标准的Java协议栈,并进行一些小的修补以使其与JAX-WS配合使用。


3
你能详细说明这个解决方案吗? - javamonkey79

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接