Не удается получить токен доступа к SharePoint

1

Я создал приложение в SharePoint 2013, используя AppRegNew.aspx, откуда я получил секретность приложения и идентификатор. Для этого приложения я устанавливаю разрешения для чтения и записи в список документов, используя AppInv.aspx.

Теперь я хочу использовать приложение secrete и Id из другого проекта для доступа к списку документов. Я использую класс TokenHelper, как показано ниже:

TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken

Но я получаю исключение:

Удаленный сервер ответил на ошибку: (404) Не найден. - Запрошенное пространство имен не существует.

Я отлаживал код из класса TokeHelper и обнаружил, что исключение происходит из этого веб-вызова:

https://accounts.accesscontrol.windows.net/metadata/json/1?realm=my_realm_value

который находится в методе:

private static JsonMetadataDocument GetMetadataDocument(string realm)

Любая помощь будет оценена, спасибо :-)

Теги:
sharepoint
sharepoint-2013
oauth

1 ответ

0
Лучший ответ

В конце концов мне удалось разобраться. Я использовал приложение SharePoint, имеющее следующие разрешения:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write">
    <Property Name="BaseTemplateId" Value="101"/>
  </AppPermissionRequest>
</AppPermissionRequests>

Кроме того, я использовал сертификат, чтобы получить токен доступа. Этот сертификат, который я связал с приложением, и установил его как эмитент-маркер доверия с использованием сценария PowerShell:

$issuerID = [System.Guid]::NewGuid().ToString().ToLower()
$publicCertPath = "your_cer_file.cer"
$certificate = Get-PfxCertificate $publicCertPath
$web = Get-SPWeb "http://your.sharepoint.url/"
$realm = Get-SPAuthenticationRealm -ServiceContext $web.Site
$fullAppIdentifier = $issuerId + '@' + $realm
New-SPTrustedSecurityTokenIssuer -Name "High Trust App" -Certificate $certificate - RegisteredIssuerName $fullAppIdentifier -IsTrustBroker
$issuerID
iisreset

Затем я использовал класс TokenHelper следующим образом:

var siteUri = new Uri("my_site_url");
TokenHelper.GetS2SAccessTokenWithWindowsIdentity(siteUri, null);
  • 0
    хотя у вас это работает, это 2 разных способа получения токена
  • 0
    хотя у вас это работает, это 2 разных способа получения токена. вариант, в котором вы получили ошибку, - это токен низкого уровня доверия Oauth, который не удался, потому что GetMetadataDocument (string realm) внутренне использует webclient для связи с ACS, и если вы работаете в среде прокси, вам нужно явно установить прокси, как webClient.Proxy = новый WebProxy («myproxy.com»); , Вариант 2, с которым вы работаете, заключается в создании приложения с высоким уровнем доверия с использованием сертификатов и без Oauth.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню