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 используется только для проверки личности пользователя для клиента. Подробнее о концепции клиента и ресурса вы можете обратиться сюда.
Пожалуйста, дайте мне знать, если это поможет.