此链接详细介绍了各种 http 客户端 java 实现。我正在寻找任何可以提供有关其 NTLM 协议实现差异的信息的链接。
在其中一台 Windows 机器上,我发现 commons-http 客户端 3.1 实现失败并出现授权错误(http 状态代码 401),但 java 1.5 实现成功。由于 NTLM 身份验证协议的 java 1.5 实现不是开源的,因此我无法比较这两种实现以了解可能出了什么问题。
更新 1
我知道公共 http 客户端不支持 NTLM v2 的事实。此链接提供了各种 java http 客户端实现之间的比较,并提到 apache http 客户端提供了NTLM 协议的部分实现。它没有详细说明它。
在进一步解决问题时,我还发现此链接提供的 NTLM 实现结合HTTPClient可以在 Windows 机器上运行(我上面提到的 commons http 客户端实现不起作用)。
更新 2
通过嗅探数据包(使用wirehack),我意识到commons http 客户端3.1 ntlm 协议实现不会在Type 3 消息中生成NTLM 响应。这是由 JDK 实现生成的。如果 NTLM 响应数据为空,您是否知道任何表明身份验证将失败的服务器/客户端设置?(因为我们面临的身份验证失败只能在一台机器上重现。身份验证在其他地方成功。)