Назад | Перейти на главную страницу

Делегирование Asp.NET и вызов веб-службы SharePoint

Я пытаюсь выполнить вызов веб-службы поиска SharePoint из приложения Asp.NET 4.0, которое не находится на сервере SharePoint. Кажется, все работает, согласитесь, что для аутентификации в SharePoint используются учетные данные AppPool (учетная запись службы домена), которая возвращает только те результаты, к которым этот контакт имеет доступ. Что мне нужно сделать, так это выдать себя за вызывающего пользователя, чтобы получить результаты для этого пользователя, а не для учетной записи домена. Я настроил сервер, на котором работает приложение, как доверенный для делегирования http spn, который использует сервер SharePoint, но при олицетворении в моем коде получаю ошибку 401. Что я делаю не так?

Это то, что известно как ограничение NTLM-аутентификации «двойным прыжком», что означает, что он не может передавать учетные данные пользователей с одного сервера на другой. См. Раздел «Вызов / ответ» по адресу: http://support.microsoft.com/kb/264921. Чтобы обойти это, вам нужно будет перейти на аутентификацию Kerberos или на основе утверждений (если у вас есть SharePoint 2010). Ни к одному из этих вариантов нельзя относиться легкомысленно.

Однако, в зависимости от потребностей вашего приложения, вы можете просто использовать клиентский вызов веб-службы через jQuery (http://jquery.com/). Вызов будет поступать из браузера, а не из сервера SharePoint, и, таким образом, будет передавать учетные данные пользователя.