2014-09-16 5 views
1

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

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

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

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

The remote server returned an error: (404) Not Found. - The requested namespace does not exist.

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

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

, который расположен в методе:

private static JsonMetadataDocument GetMetadataDocument(string realm) 

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

ответ

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

, хотя вы его работали, это два разных способа получения токена. опция, где u получила ошибку, - это токен Low Trust Oauth, который потерпел неудачу, потому что GetMetadataDocument (строка realm) внутренне использует веб-клиент для общения с ACS, и если вы работаете в прокси-среде, вам нужно установить прокси явно как webClient.Proxy = новый WebProxy («myproxy.com»); , Вариант 2, который вы получили, - это приложение с высоким доверием, используя сертификаты и без Oauth –

Смежные вопросы