我在 Sharepoint 2007 机器上托管一个 ASP.NET Web 应用程序,该应用程序对 Sharepoint 进行 Web 服务调用以检索文档位置(特别是 GetListItems 方法)。
该服务通过传递具有适当权限的有效 Sharepoint 帐户的凭据来使用。
ListServiceWrapper listService = new ListServiceWrapper();
/*Pass credentials to service call object*/
listService.Credentials = new NetworkCredential(spUserName, spPassword, spDomain);
/*Set the Url property of the service for the path to a subsite.*/
listService.Url = ConfigurationManager.AppSettings.Get("rootSite") + "/_vti_bin/lists.asmx";
当 Web 应用程序在我的开发盒上本地运行时(我是同一域上的 Sharepoint 用户),服务调用效果很好。当部署到 Sharepoint 框时,应用程序返回:
请求失败,状态为 HTTP
401:未经授权。
我们尝试将 Sharepoint 框中 Web 应用程序的应用程序池用户更改为授权的 Sharepoint 用户,但仍然没有任何运气。我想如果我们将 Sharepoint 身份验证更改为 Kerberos 而不是 NTLM,就可以解决该问题。不幸的是,这不是一个选择。这可能与 NLTM 双跳问题有关吗?
是的,这与双跳问题有关。
在 NTLM 中,不允许您对远程服务进行身份验证。正如您所说,您需要 Kerberos 将凭据委托给其他服务。
您可以尝试的选项:
- 切换到 Kerberos。这是唯一正确的解决方案,但它并不那么容易,因为您必须创建所有 SPN 并确保端口 88 已打开。
- 在 SharePoint 框中安装 ASP.Net 应用程序并激活禁用环回检查 http://support.microsoft.com/kb/896861
- 使用服务帐户登录 SharePoint。在这种情况下,SharePoint 将不会在用户帐户下运行,因此您必须自己处理安全性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)