Mirosoft Graph API выдает ошибку неподдерживаемых привилегий

Я создал приложение в apps.dev.microsoft.com. Я использую https://login.microsoftonline.com/common/oauth2/v2.0/authorize для кода авторизации и https://login.microsoftonline.com/common/oauth2/v2.0/token для доступа и обновления токенов, Я успешно получаю токен доступа, но когда я пытаюсь прочитать данные профиля пользователя, вошедшего в систему, появляется сообщение об ошибке:

Array (
    [error] => Array
        (
            [code] => Authorization_RequestDenied
            [message] => Insufficient privileges to complete the operation.
            [innerError] => Array
                (
                    [request-id] => 02269b14-2cf9-458e-b9d6-2aec1a23cee3
                    [date] => 2017-02-23T16:30:44
                )

        )

)

Когда я использую оригинальный идентификатор, с которым было создано приложение, эта ошибка не отображается. Но когда я использую любой другой идентификатор за пределами моей аренды, эта ошибка появляется. Кто-нибудь может предложить какой-либо обходной путь для этого?

1 ответ

Решение

Основываясь на предварительном сообщении, вы использовали запрос, как показано ниже, для получения токена:

GET:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id={clientId}&scope=openid%20profile&redirect_uri={redirectURL}

В этом запросе вы использовали область(openid,profile), который не возвращает access_token для использования Microsoft Graph REST. Область действия профиля возвращает только пользовательскую информацию в id_token, а не дает вам разрешение на доступ к пользовательской информации через Microsoft Graph REST.

Если вы хотите использовать Microsoft Graph REST, нам нужно добавить область видимости, как https://graph.microsoft.com/user.Read(больше информации о прочтении информации о пользователе смотрите здесь). А вот пример запроса для вашей ссылки, чтобы включить доступ к профилю пользователя через https://graph.microsoft.com/v1.0/me:

GET:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id={clientId}&scope=https://graph.microsoft.com/user.Read%20openid%20profile&redirect_uri={redirectURL}

И, пожалуйста, обратите внимание, что access_token отличается от id_token. Мы должны выполнить запрос на ресурс (Microsoft Graph), используя access_token. Id_token используется только для проверки личности пользователя для клиента. Подробнее о концепции клиента и ресурса вы можете обратиться сюда.

Пожалуйста, дайте мне знать, если это поможет.

Другие вопросы по тегам