与Sharepoint服务器上托管的ASP.NET Web App的Sharepoint 2007 NTLM问题

时间:2008-11-04 16:50:22

标签: .net sharepoint ntlm

我正在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应用程序的App Pool用户更改为授权的Sharepoint用户,但仍然没有任何运气。我想如果我们将Sharepoint身份验证更改为Kerberos而不是NTLM,它将解决问题。不幸的是,这不是一个选择。这可能与NLTM双跳问题有关吗?

1 个答案:

答案 0 :(得分:3)

是的,这与双跃点问题有关 在NTLM中,不允许您对远程服务进行身份验证。正如您所说,您需要Kerberos将凭据委托给其他服务。

您可以尝试的选项:

  • 切换到Kerberos。这是唯一正确的解决方案,但它不是那么容易,因为您必须创建所有SPN并确保端口88处于打开状态。
  • 在SharePoint框中安装ASP.Net应用程序并激活DisableLoopbackCheck
  • 使用服务帐户登录SharePoint。在这种情况下,SharePoint将不会在用户帐户下运行,因此您必须自己处理安全性