当前位置: 首页 > 面试题库 >

从Java使用SharePoint Web服务时NTLM失败?

薛弘壮
2023-03-14
问题内容

我有一个Java客户端,它使用通过JDK 6的JAX-WS实现编写的SharePoint
2010标准Web服务(sitedata.asmx,Permissions.asmx等)。

到目前为止,使用自定义Authenticator实现和Authenticator.setDefault(...)方法对NTLM进行身份验证。

在只有一台SharePoint服务器的测试环境中运行时,它可以正常工作。我可以看到所有使用WireShark进行的NTLM协商。

但是,如果在具有多个服务器,硬件负载平衡和多个SharePoint备用访问映射的客户中运行,则从Web服务调用中会出现错误401未经授权。我还没有机会使用WireShark在该环境上进行调试。

我从Windows计算机(在客户安装程序上)运行客户端,因此根据Java文档,对于NTLM应该很好。另外,我使用了SharePoint的默认URL来访问Web服务(而不是负载平衡的URL)。

运行客户端应用程序的计算机不是SharePoint服务器。它具有配置了NTLM的Windows集成身份验证。

另外,由于SharePoint管理策略的原因,我无法访问SharePoint管理中心或对配置(或IIS)进行任何更改。

我想问问是否有人知道这个问题可能是什么?希望有人知道如何解决吗?

提前致谢。

编辑:

值得一提的是,两种环境都授予了相同的权限级别。


问题答案:

好吧,终于有机会在客户环境中使用WireShark。

首先,我注意到他们已经配置了NTLM v2,但这没关系,因为Java 1.6支持它。

然后我看到,由于启用了Windows集成身份验证,因此将发送当前记录的用户凭据,而不是代码中配置的凭据。由于登录的用户对SharePoint没有权限,因此我收到401未经授权。

根据Java文档,这是正常现象

实际上,如果您以域用户身份在Windows机器上运行,或者您已经在Linux或Solaris机器上运行,该机器已经发出了kinit命令并获得了凭据缓存。MyAuthenticator类将被完全忽略......,表明未查询用户名和密码。这就是所谓的单点登录。

最后,我观察到使用HTTP首先将尝试Windows凭据,并且在失败时将使用代码提供的凭据。因此,一切正常。

使用HTTPS时,将仅使用Windows凭据,因此我总是获得401 Unauthorized。

不知道是什么原因导致HTTP和HTTPS之间的差异。



 类似资料:
  • 问题内容: 我正在尝试使用Jmeter测试Web服务。该Web服务受NTLM身份验证(windows)保护。我可以使用sampler 加载WSDL 。当前,仅当我将SO服务器中提到的BurpSuit与代理服务器一起使用时,它才有效(而不是SOUP UI,而是将Jmeter与BurpSuite一起使用)。 但是我不想使用代理服务器,而是想直接在Jmeter中通过NTLM身份验证使用Web服务。我已经

  • 我正在使用Vagrant部署到Ubuntu Linux,并尝试启动服务。 然后我跟踪,发现: ?tomcat8.service-lsb:启动tomcat。加载:加载(/etc/init.d/tomcat8) active:失败(结果:exit-code)自2016-03-28 09:44:17 GMT;5s前 文档:人:systemd-sysv-generator(8) 进程:884 execst

  • 我有一个Micronaut服务,它是使用jQuery中实现的AJAX调用从客户端调用的。Micronaut服务如下所示: 调用micronaut服务的Javascript如下: 不幸的是,尽管我告诉服务器和客户机处理纯文本,但AJAX调用失败,出现以下消息: 我是在Micronaut的控制器处理程序中发现了一个bug,还是在客户机或服务器代码中丢失了什么?有什么方法让这个AJAX调用工作吗? 更新

  • 问题内容: 在我的Java应用程序中,我正在使用以下方法从服务器下载文件。 但是此下载非常慢。我该如何快速? 问题答案: 从Java 7开始,您可以下载具有以下内置功能的文件: 对于早期版本,从Java 1.4到Java 6的解决方案是 此代码将URL内容传输到没有任何第三方库的文件。如果仍然很慢,那您就知道这不是附加库的问题,很可能不是Java的问题。至少您在这里没有什么可以改善的。因此,您应该

  • 问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com

  • 我相对来说是JMeter的新手,但是我很难让HTTP Sampler登陆到一个安全的网页上。我认为它需要NTLM认证,所以我使用HTTP授权管理器来传递BlazeMeter指南中指定的凭证 我的授权管理器具有以下值: 基本网址: https:// [测试站点] 用户名: [我的用户名] 密码: [我的密码] 域:与基本网址相同 机制: BASIC_DIGEST 然而,我只是得到一个401错误(见下