Токен доступа, не содержащий претензий SCP (ролей) через Microsoft Graph - PullRequest
1 голос
/ 24 апреля 2019

Я использую Microsoft Graph SDK, чтобы получить токен доступа для моего приложения (не пользователя) для чтения с sharepoint. Я следил за этим документом , а также разместил этот ТАК вопрос . Код в связанном SO такой же. Я смог добавить разрешения для приложений, а также предоставить их (нажав кнопку) на портале Azure. Проблема в том, что токен, который возвращается для использования, не содержит никаких ролей / заявок scp. Поэтому, когда я использую токен, я получаю сообщение "Требуется либо утверждение scp, либо роли в сообщении токена" .

Просто чтобы быть уверенным, единственное значение для моей области, которое я передаю при получении токена доступа: https://graph.microsoft.com/.default. Я не передаю ничего, как Sites.ReadWrite.All (я получаю исключение, если я все равно добавлю эту область). Я не уверен, как продолжить устранение неполадок, и любая помощь будет оценена.

Редактировать: добавлен код с использованием графического SDK, показанного ниже:

var client = new ConfidentialClientApplication(id, uri, cred, null, new SessionTokenCache());
var authResult = await client.AcquireTokenForClientAsync(new[] {"https://graph.microsoft.com/.default"});
var token = authResult.AccessToken;
var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request => {request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token)}));
var drives = await graphServiceClient.Sites[<sharepoint_host>].SiteWithPath(<known_path>).Drives.Request().GetAsync(); 

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Похоже, что инициализация приложения по-другому - это решение:

var app = new ConfidentialClientApplication(ClientId, Authority, RedirectUri, credentials, null, new TokenCache());
1 голос
/ 25 апреля 2019

Проблема в том, что токен, который возвращается для использования, не содержит каких-либо утверждений о ролях / scp.

Если вы не можете найти никаких утверждений о ролях / scp в декодированный токен доступа.Необходимо снова проверить разрешение на портале Azure.

Расшифрованный токен доступа должен содержать предоставленные вам роли.

enter image description here

ВходПортал Azure-> щелкните Azure Active Directory-> щелкните Регистрация приложений (предварительный просмотр) -> найдите свое приложение.

enter image description here

Щелкните приложение -> разрешения API-> проверьте, есть ли у вас разрешение администратора на ваше заявление.Если нет, нажмите «Предоставить согласие администратора».

enter image description here

Код для получения токена доступа.Вы можете найти более подробную информацию здесь .

    //authority=https://login.microsoftonline.com/{tenant}/
    ClientCredential clientCredentials;
    clientCredentials = new ClientCredential("{clientSecret}");
    var app = new ConfidentialClientApplication("{clientId}", "{authority}", "{redirecturl}",
                                    clientCredentials, null, new TokenCache());
    string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
    AuthenticationResult result = null;
    result =  app.AcquireTokenForClientAsync(scopes).Result;
    Console.WriteLine(result.AccessToken);
...