SPSite в веб-сервисе выдает ошибку 401
-
05-07-2019 - |
Вопрос
У меня есть этот код:
using ( var site = new SPSite( myUrl ) ) {
using ( var web = site.AllWebs[0] ) {
// read-only operations
}
}
"myUrl" - это верхний URL домена в WSS 3.0.Проверка подлинности настроена на Windows.Если я запущу этот код из командной строки под учетной записью "external_app_user", все будет в порядке.Но если я запущу этот код из webservice (вне WSS webapplication), то результатом будет http-ответ "401 НЕСАНКЦИОНИРОВАННЫЙ" вместо ответа SOAP.Это странно, потому что этот код находится в блоке "try-catch", и если возникло какое-либо исключение, я вернул собственное сообщение об ошибке в ответе SOAP.
Код выполняется на том же компьютере, что и WSS.
Если я запускаю веб-сервис из webbroser на компьютере, на котором запущен веб-сервис, отображается классическая форма входа в Windows.Если я запускаю веб-сервис из webbrowser на другом компьютере, я получаю только HTTP-ответ "401 НЕСАНКЦИОНИРОВАННЫЙ".
Веб-служба запущена под правильной учетной записью.Эта учетная запись имеет доступ к WSS (протестирована через веб-сайт SharePoint).Если я попытаюсь получить "Систему.Безопасность.Принципал.WindowsIdentity.GetCurrent().Name" возвращается правильное имя пользователя.
В web.config задано "<identity impersonate="true" userName="_my_username_" password="_my_password_" />.
У кого-нибудь есть идеи, в чем дело?
Решение 3
Я нашел решение: http://solutionizing.net/2009/01/06/elegant-spsite-elevation/
Другие советы
Причина, по которой вы не можете перехватить 401, заключается в том, что SharePoint имеет пользовательскую обработку для этого исключения, см. Этот поток: Не удается перехватить сообщение об ошибке "Отказано в доступе к SharePoint (включая предложение, как его отключить).
Вы могли бы проверить в IIS, разрешена ли как анонимная проверка подлинности, так и проверка подлинности Windows.Тогда это может позволить вам пройти как анонимному пользователю, вместо того чтобы считывать ваши идентификационные данные Windows, что впоследствии приведет к несанкционированному доступу.