我正在尝试从不在 SharePoint 服务器上的 Asp.NET 4.0 应用程序调用 SharePoint 搜索 Web 服务。一切似乎都正常,接受它使用 AppPool 的凭据(域服务帐户)向 SharePoint 进行身份验证,这只返回该 pin 有权访问的结果。我需要能够做的是模拟调用用户,以便获得该用户的结果而不是域帐户的结果。我已将应用程序正在运行的服务器设置为可信任,以便委托给 SharePoint 服务器正在使用的 http spn,但在代码中进行模拟时出现 401 错误。我可能做错了什么?
答案1
这就是所谓的 NTLM 身份验证的“双跳”限制,这意味着它无法将用户凭据从一台服务器传递到另一台服务器。请参阅以下位置的“质询/响应”部分:http://support.microsoft.com/kb/264921。为了解决这个问题,您需要转换为 Kerberos 身份验证或基于声明的身份验证(如果您有 SharePoint 2010)。这两个选项都不能掉以轻心。
但是,根据应用程序的需求,您可能只需通过 jQuery 使用客户端调用 Web 服务即可(http://jquery.com/)。该调用将来自浏览器而不是 SharePoint 服务器,因此将传递用户的凭据。