Учетные данные клиента Microsoft OAuth 2.0 - невозможно получить разрешение для области действия даже с предоставленным согласием администратора в Azure - PullRequest
1 голос
/ 01 июля 2019

Я работаю над сервисом демона, который извлекает список контактов из Microsoft Graph и не запрашивает аутентификацию Microsoft для пользователя. Однако я не могу получить разрешения, которые я установил в Microsoft Azure, даже с разрешения администратора.

Я использую Почтальон для генерации токена со следующей информацией.

https://login.microsoftonline.com/0835055b-8a00-4130-b07a-037430dd000d/oauth2/v2.0/token

Следующий json - результат, который я получаю

{
    "token_type": "Bearer",
    "scope": "profile openid email https://graph.microsoft.com/User.Read https://graph.microsoft.com/.default",
    "expires_in": 3600,
    "ext_expires_in": 3600,
    "access_token": "{MY_TOKEN_HERE}"
}

Токен создан успешно, но возвращенный токен не включает в себя разрешение с предоставленным согласием администратора, которое я установил в MS Azure на portal.azure.com> Зарегистрированное приложение> Разрешение API.

У меня есть Microsoft Graph - Users.Read и Contacts Read с зелеными галочками, требуется согласие администратора. Смотрите изображение ниже:

Microsoft Azure - разрешение API

И без возможности я не могу получить список контактов с данным токеном.

{
    "error": {
        "code": "ErrorAccessDenied",
        "message": "Access is denied. Check credentials and try again.",
        "innerError": {
            "request-id": "63a24a22-34f7-42a1-a9d5-d7aaf598f4d6",
            "date": "2019-07-01T02:59:15"
        }
    }

}

Я что-то пропустил? Я предположил, что когда администратор даст согласие, я смогу включить API в области для генерации токенов.

Я видел, что здесь есть похожая проблема, но нет решений, которые работают для меня: Microsoft graph API: невозможно получить пользователей с созданным токеном доступа

1 Ответ

1 голос
/ 03 июля 2019

На основании вашего снимка экрана предоставленные вам контакты. Является разрешением приложения. И у вас есть только одно делегированное разрешение: user.read.

Однако, если вы хотите вызвать граф api: graph.microsoft.com/v1.0/me/contacts, вам необходимо использовать делегированное разрешение. Это будет представлять пользователя. Таким образом, вы можете получить информацию для «меня». И на основании официальной документации необходимо предоставить делегированное разрешение Contacts.Read (Contacts.ReadWrite для записи).

enter image description here

Если вы хотите использовать разрешение приложения, вам необходимо получить токен доступа с потоком учетных данных клиента . Полученный таким образом токен можно использовать для разрешения приложения. И вы должны вызвать API следующим образом: graph.microsoft.com/v1.0/users/ enjid | UserPrincipalName} / контакты

...