Веб-сервис SOAP, работающий в SharePoint - PullRequest
1 голос
/ 31 марта 2009

У меня есть веб-служба SOAP, работающая на моей коробке sharepoint в каталоге _layouts, и толстый клиент, который использует эту службу SOAP. У нас есть один блок sharepoint, который использует базовую аутентификацию, а другой - клиентские сертификаты. Мне нужен этот сервис SOAP для обновления некоторых элементов списка в библиотеке документов. Проблема в том, что у меня ничего не получается, если я не запускаю блок с повышенными привилегиями. Вот фрагмент кода того, что я пытаюсь сделать.

using (SPSite site = new SPSite(fileUrl))
using (SPWeb web = site.OpenWeb()) {
   // web.CurrentUser is always null unless in elevated privileges block.
   // do something with document library...
   web.Files.Add(...); // fails with access denied unless in elevated privileges block.
}

Я также пытался "SPContext.Current.Web", но он возвращает ноль для "web.CurrentUser", даже если я нахожусь в блоке с повышенными привилегиями.

Я действительно не могу использовать блок с повышенными правами, потому что пользователи жалуются на то, что все, что касается моей службы SOAP, изменено системой.

Из толстого клиента мы используем код, подобный следующему ...

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestString);
if(basicAuth) {
   request.Credentials = System.Net.CredentialCache.DefaultCredentials;
}
else {
   X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
   store.Open(OpenFlags.ReadOnly);
   foreach (X509Certificate2 certificate in store.Certificates) {
      request.ClientCertificates.Add(certificate);
}
request.GetResponse();

Мы вручную создаем SOAP-запрос по разным причинам.

1 Ответ

1 голос
/ 31 марта 2009

Если вы хотите, чтобы ваш веб-сервис правильно интегрировался в контекст sharepoint (т. Е. Мог запросить «текущего пользователя sharepoint»), вы должны действительно развернуть его в _vti_bin (подпапка ISAPI 12 hyve), а не в _layouts.

Обнаружение представляет собой небольшую боль и требует ручной настройки файлов (для получения дополнительной информации см. статью MSDN о пользовательских веб-сервисах в SharePoint ), но, поскольку вы вручную создаете свой запрос, обнаружение не должно быть проблемой.

[Редактировать] В качестве альтернативы, вы можете попробовать получить SPUserToken аутентифицированного пользователя Windows,

SPUserToken token = web.AllUsers[WindowsIdentity.GetCurrent().Name].UserToken;

, а затем используйте этот токен, чтобы открыть сайт и сеть от имени этого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...