下面是我的场景:我有一个正在工作的SharePoint站点,它位于一个服务器场上。在这个站点中,我创建了一个HttpHandler,它使用位于不同服务器上的SharePoint搜索uses服务。所以看起来是这样的:
我的代码如下所示:
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‘。从服务器接收到的身份验证标头是“NTLM”。
我尝试过以上代码的许多不同组合,而在我的HttpHandler中唯一起作用的是当我直接提供我的凭证时。有人有什么想法吗?
谢谢。
发布于 2010-08-13 09:59:20
NTLM不能将凭据委托给远程服务器。
这就是所谓的“双跳”问题。http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx
您必须配置Kerberos。基本上:
administration)
是的,Kerberos的位置并不容易.
https://stackoverflow.com/questions/3472954
复制相似问题