[英]SharePoint search web service error (NTLM) when called from HttpHandler
这是我的情况:我有一个正在工作的SharePoint网站,它位于一个服务器场上。 在此站点中,我创建了一个HttpHandler,该HttpHandler使用位于其他服务器上的SharePoint搜索Web服务。 所以看起来像这样:
我的代码如下所示:
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。 基本上:
是的,Kerberos并不是那么容易实现...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.