目前无法使用在 IIS 上运行的 Microsoft Project Server 2007 实例进行身份验证,并从运行在 Linux、RHEL 5.5 上的 Java 1.6(u19) 客户端启用集成 Windows 身份验证。
注意:客户端在我的 Windows 工作站上工作。
我最初试图实现一个 JAX-WS 调用,发现由于身份验证错误,我无法检索 WSDL,特别是 401.2,然后是 500。所以我将它简化为一个 Java 类:
Authenticator
在 AD 中使用对项目服务器站点具有权限的用户名/密码创建一个并将其设置为默认值- 创建一个
java.net.URL
对象 - 创建
java.net.HttpURLConnection
并调用getInputStream
- 正是在这一点上发生了故障。
HttpURLConnection
打开调试后,我可以看到:
- 从服务器返回的初始身份验证失败(401.2),响应中包含“negotiate”和“NTLM”。
- 客户端创建 NTLM 令牌并将其发送回服务器
- 服务器返回 500 状态码
在日志中的 Windows 服务器上,我可以看到日志文件中没有包含仅针对我的请求的用户名,只有一个“-”,我认为它的意思是“匿名”。
我的想法是 Project Server 不喜欢正在传递和阻塞的 NTLM 令牌。基于这方面的许多帖子,NTLM (v1 & v2) 应该在 Java 1.6 中得到支持。
任何帮助将不胜感激...
2012 年6 月 20 日更新:将问题缩小到网络安全的本地安全策略设置:基于 NTLM SSP(包括 RPC)服务器的最低会话安全。导致 Java 客户端失败的设置是Require NTLMv2 security。这与 1.6 JDK 所声称的 NTLM 支持背道而驰。
一些参考资料: