【问题标题】:SharePoint search web service error (NTLM) when called from HttpHandler从 HttpHandler 调用时的 SharePoint 搜索 Web 服务错误 (NTLM)
【发布时间】:2010-08-12 23:59:19
【问题描述】:

这是我的场景:我正在处理一个 SharePoint 网站,它位于一个服务器场上。在此站点中,我创建了一个 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 处理程序中的相同代码时,它会给出错误

HTTP 请求未经授权 客户端身份验证方案“Ntlm”。 收到的认证头 来自服务器的是“NTLM”。

我已经尝试了上述代码的多种不同组合,唯一可以在我的 HttpHandler 中使用的组合是当我直接提供我的凭据时。有人有什么想法吗?

谢谢。

【问题讨论】:

    标签: c# web-services sharepoint httphandler ntlm


    【解决方案1】:

    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 并不是那么容易实施...

    【讨论】:

    • 谢谢。我还使用了另一篇帖子stackoverflow.com/questions/262442/…,其中包含相同的信息以及使用搜索网络服务的其他几个选项。不幸的是,在我的组织中,Kerberos 似乎没有得到很好的支持,因此我可能无法使用它。我还被告知,其他帖子中建议的 DisableLoopbackCheck 也不能解决我的问题。看起来我必须找到另一种方法来做我需要的事情。不过再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多