Я размещаю веб-приложение ASP.NET в блоке Sharepoint 2007, которое вызывает вызов веб-службы в Sharepoint для получения местоположения документа (в частности, метода 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";
Когда веб-приложение запускается локально в моем модуле разработки (я являюсь пользователем Sharepoint в том же домене), вызов службы работает отлично. При развертывании в поле Sharepoint приложение возвращает:
The request failed with HTTP status 401: Unauthorized.
Мы попытались изменить пользователя пула приложений веб-приложения в поле Sharepoint на авторизованного пользователя Sharepoint, но нам все равно не повезло. Я полагаю, если бы мы изменили аутентификацию Sharepoint на Kerberos вместо NTLM, это решило бы проблему. К сожалению, здесь это не вариант. Возможно, это как-то связано с проблемой двойного перехода NLTM?





Да, это связано с проблемой двойного прыжка. В NTLM вам не разрешено аутентифицироваться для удаленных служб. Как вы сказали, вам понадобится Kerberos для делегирования учетных данных другим службам.
Варианты, которые вы можете попробовать:
DisableLoopbackCheck работал как шарм. Я провел небольшое исследование (в Google) относительно того, какие проблемы это может вызвать в коробке Sharepoint, но не смог их найти. Очень ценю ответ, желаю хорошего.