1

目前无法使用在 IIS 上运行的 Microsoft Project Server 2007 实例进行身份验证,并从运行在 Linux、RHEL 5.5 上的 Java 1.6(u19) 客户端启用集成 Windows 身份验证。

注意:客户端在我的 Windows 工作站上工作。

我最初试图实现一个 JAX-WS 调用,发现由于身份验证错误,我无法检索 WSDL,特别是 401.2,然后是 500。所以我将它简化为一个 Java 类:

  1. Authenticator在 AD 中使用对项目服务器站点具有权限的用户名/密码创建一个并将其设置为默认值
  2. 创建一个java.net.URL对象
  3. 创建java.net.HttpURLConnection并调用getInputStream
  4. 正是在这一点上发生了故障。

HttpURLConnection打开调试后,我可以看到:

  1. 从服务器返回的初始身份验证失败(401.2),响应中包含“negotiate”和“NTLM”。
  2. 客户端创建 NTLM 令牌并将其发送回服务器
  3. 服务器返回 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 支持背道而驰。

一些参考资料:

4

1 回答 1

0

不久前,当我遇到这个问题时,我最终使用了其他人创建的方案。

http://devsac.blogspot.com/2010/10/supoprt-for-ntlmv2-with-apache.html

当我不得不从带有 ntlm 的 iis 服务器获取图像文件时为我工作。使用上面的代码片段..

AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, org.xyz.JCIFS_NTLMScheme.class);
            HttpClient client = new HttpClient();
            client.getState().setCredentials(AuthScope.ANY, new NTCredentials(userName, password, "", strDomain));
            GetMethod get = new GetMethod(strImageFile);
            get.setDoAuthentication(true);
            client.executeMethod(get);
于 2013-10-03T23:12:20.663 回答