Поделиться через


Устранение неполадок надстроек 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 с высоким уровнем доверия.

Авторизации может препятствовать несовпадение доменных имен в файлах конфигурации и регистрационных формах. Следующие четыре значения должны полностью совпадать:

  • Домен надстройки, который указывается при регистрации Надстройка 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 и введите его вручную.

См. также