繁体   English   中英

从HttpHandler调用SharePoint搜索Web服务错误(NTLM)

[英]SharePoint search web service error (NTLM) when called from HttpHandler

这是我的情况:我有一个正在工作的SharePoint网站,它位于一个服务器场上。 在此站点中,我创建了一个HttpHandler,该HttpHandler使用位于其他服务器上的SharePoint搜索Web服务。 所以看起来像这样:

  1. 我的网站所在的SharePoint Server A
    • 在服务器B上具有对SharePoint搜索Web服务的服务引用
    • 有一个使用服务引用来调用搜索服务的http处理程序
  2. 搜索服务所在的SharePoint Server B

我的代码如下所示:

BasicHttpBinding binding = new BasicHttpBinding();

binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;

QueryServiceSoapClient _queryService = new QueryServiceSoapClient(binding, new EndpointAddress("http://easearch.ea.com/_vti_bin/search.asmx"));
_queryService.ClientCredentials.Windows.AllowNtlm = true;
_queryService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
_queryService.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
//_queryService.ClientCredentials.Windows.ClientCredential = new NetworkCredential("MyUsername", "MyPassword", "MyDomain"); //This is the only way it seems to work
//NetworkCredential userCredential = CredentialCache.DefaultCredentials.GetCredential(_queryService.Endpoint.ListenUri, "NTLM");
//_queryService.ClientCredentials.Windows.ClientCredential = userCredential;

string status = _queryService.Status();

如果我从开发人员控制台上的控制台应用程序使用此代码,则它将按预期工作。 但是当我尝试使用我的http处理程序中的相同代码时,它给出了错误

客户端身份验证方案“ Ntlm”对HTTP请求进行了未经授权的操作。 从服务器收到的身份验证标头是“ NTLM”。

我已经尝试了以上代码的多种不同组合,并且从HttpHandler中唯一起作用的是我直接提供凭据时。 有人有想法么?

谢谢。

NTLM无法将凭据委派给远程服务器。

这称为“双跳”问题。 http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx

您必须配置Kerberos。 基本上:

  • 配置SharePoint以使用Kerberos(在管理中心的“身份验证提供程序”中)
  • 在您的应用程序池帐户上为SharePoint创建一个SPN(使用命令行“ setspn”)
  • 在运行此站点的应用程序帐户上为服务器B上运行的网站创建SPN
  • 配置2之间的委派

是的,Kerberos并不是那么容易实现...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM