Устранение неполадок надстроек SharePoint с высоким уровнем доверия
Использование средства Fiddler
С помощью бесплатного средства Fiddler можно перехватывать HTTP-запросы, отправляемые удаленным компонентом надстройки в среду SharePoint.
Существует бесплатное расширение для этого средства, которое автоматически декодирует маркеры доступа в запросах.
Установив Fiddler на сервере веб-приложений, добавьте в файл web.config следующую разметку, чтобы запросы удаленного веб-приложения проходили через данный прокси-сервер. Таким образом вы сможете отследить трассировку Fiddler и целиком увидеть отклик SharePoint при возникновении ошибки.
Примечание.
Если вы не используете Fiddler, обязательно удалите данную маркировку. В противном случае ваша надстройка не сможет выполнять HTTP-запросы.
<system.net>
<defaultProxy>
<proxy usesystemdefault="False" bypassonlocal="False" proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>
Установив средство Fiddler, вы также сможете проверять заголовки откликов от SharePoint, включающие GUID запроса. Этот GUID запроса представляет собой идентификатор корреляции, который можно искать в журналах, чтобы находить ошибки, связанные с этим запросом.
Ошибка 401 Unauthorized
Ошибка авторизации 401 Unauthorized может возникать по нескольким причинам, когда надстройка с высоким уровнем доверия впервые обращается к SharePoint. Если вы используете клиентскую объектную модель (CSOM), ошибка выглядит следующим образом:
[WebException: The remote server returned an error: (401) Unauthorized.]
System.Net.HttpWebRequest.GetResponse() +8515936
Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute() +178
Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb) +1427
Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery() +270
Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery() +146
Microsoft.SharePoint.Client.ClientContext.ExecuteQuery() +666
S2STestWeb.Default.Page_Load(Object sender, EventArgs e) in c:\MyFiles\HightrustTest\HightrustTestWeb\Default.aspx.cs:28
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178
При использовании файла TokenHelper и удостоверения Windows код, вызывающий исключение, выглядит так:
ClientContext clientContext =
TokenHelper.GetS2SClientContextWithWindowsIdentity(sharepointUrl, Request.LogonUserIdentity);
clientContext.Load(clientContext.Web);
clientContext.ExecuteQuery();
Чтобы устранить неполадку, в первую очередь необходимо с помощью отладчика Visual Studio проверить, успешно ли созданы маркер доступа и объект ClientContext. Если это так, необходимо проверить следующие возможности:
Возможные проблемы и способы их решения.
Не создан профиль для пользователя, который пытается получить доступ к удаленному веб-приложению. Создайте профиль пользователя.
У надстройки нет разрешения на доступ к запрашиваемому ресурсу. Откройте командную консоль SharePoint и введите приведенную ниже последовательность командлетов Windows PowerShell. Переменная
$web
— это веб-сайт SharePoint, к которому вы пытаетесь получить доступ, а$appPrincipal
— это ИД надстройки. Дополнительные сведения см. в статье Set-SPAppPrincipalPermission.Set-SPAppPrincipalPermission -Site $web -AppPrincipal $appPrincipal -Scope Site -Right FullControl
Ваше веб-приложение принимает анонимные запросы. Это значит, что в маркере доступа отсутствует действующее удостоверение пользователя. Проверьте, отключен ли анонимный доступ в IIS для корневого каталога вашего удаленного веб-приложения. Это также можно проверить, выполнив отладку удаленного веб-приложения и проверив значение Request.LogonUserIdentity файла default.aspx (с расширением CS или VB), чтобы убедиться, что пользователь не анонимный.
Цифровой сертификат не был добавлен в хранилище доверенных сертификатов. Убедитесь, что вы выполнили процедуры, описанные в статье Упаковка и публикация надстроек SharePoint с высоким уровнем доверия.
Прочие ошибки авторизации, связанные с протоколом SSL и доменами
Авторизации может препятствовать несовпадение доменных имен в файлах конфигурации и регистрационных формах. Следующие четыре значения должны полностью совпадать:
Домен надстройки, который указывается при регистрации Надстройка SharePoint в AppRegNew.aspx.
Домен, на котором зарегистрирован сертификат безопасности удаленного веб-приложения.
Часть значения StartPage, относящаяся к домену, в файле AppManifest.xml.
Доменная часть URL-адресов всех приемников событий, указанных в файле AppManifest.xml.
В связи с этим учтите указанные ниже особенности.
Если удаленный компонент надстройки SharePoint использует порт, отличный от 443, необходимо явно включить этот порт в качестве части домена во всех четырех местах. Пример:
MarketingServer:3333
. (Необходимо использовать протокол HTTPS, для которого по умолчанию используется порт 443.)Перед упаковкой надстройки необходимо жестко указать домен в значении StartPage (и во всех URL-адресах приемников событий) в файле AppManifest.xml. Если для упаковки надстройки вы используете мастер публикации в среде Visual Studio, вам будет предложено указать домен, и инструменты Visual Studio Office Developer Tools автоматически добавят домен в значение StartPage (вместо маркера
~remoteWebUrl
, используемого во время отладки). Но если вы не используете мастер публикации, то вам потребуется вручную заменить маркер на домен (и протокол). Пример:https://MarketingServer
илиhttps://MarketingServer:3333
.
Ошибка выполнения с сообщением об отсутствии сертификата с этим серийным номером
Если вы уверены, что у вас есть правильный серийный номер сертификата в web.config, а сертификат отображается в хранилище сертификатов Windows, в серийном номере в web.config может быть скрытый дополнительный символ. Это происходит, если серийный номер копируется и вставлен из консоли управления Майкрософт. Полностью удалите серийный номер из файла web.config и введите его вручную.