Я пытаюсь вызвать граф API, чтобы получить информацию о пользователе. Я использую почтальона, чтобы сначала получить токен, а затем использовать этот токен, пытаясь сделать запрос к графическому API.
Я получаю токен с почтовым запросом ниже и с 4 ключевыми значениями для grant_type, client_id, client_secret and resource.
https://login.microsoftonline.com/{{tenantid}}/oauth2/token
Ответ
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "3600",
"expires_on": "1555583717",
"not_before": "1555579817",
"resource": "https://management.azure.com/",
"access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNiIsIng1dCI6IkhCeGw5bUFlNmd4YXZDa2NvT1UyVEhzRE5hMCIsImtpZCI6IkhCeGw5bUFlNmd4YXZDa2NvT1UyVEhzRE5hMCJ9.yyyyyyyLTBjYjZmZDNiM2UwNCIsInRpZCI6IjM3NGY4MDI2LTdiNTQtNGEzYS1iODdkLTMyOGZhMjZlYzEwZCIsInV0aSI6ImVWTWdDbkU4QWtPVXY3bFQ2QlRSQUEiLCJ2ZXIiOiIxLjAifQ.kxHCm2oGsuUvlXbncXQe7Wb0l-ZENqqG9_P_co0SPdYA3GkhFKDi6sQ7OaaHeDs4S6kN0-Diw5qBOzmFipSA5EUorA7UDbJfiSVVlaEzLY3IX_4WSV4Exc-kLOaX0j7KgvsEQbc5TEk8e4dPfokG98gGPmhy19xLyV84lX1v6DzgXINzP8gPkGmqR_J7iVFQ3m-Y18dHlxDpqQMTKxvQGnrsa7rflyxGUwEwwFZJH8t5NRv_mjQOIQBuosfhMAH88l-J8zEmXWLFqEzFBBWrz9UxT6X-XxRQZW4WBSoHTKd3vuBcEo6kUclfe4G7COOvI4zG0-j10mmGziKlzjNVMw"
}
Затем я использую токен, чтобы сделать запрос GET
https://graph.windows.net/{{company}}/users/{{email}}?api-version=1.6
и заголовок
Key Value
Authorization Bearer {{token}}
но не получается с этой ошибкой
{
"odata.error": {
"code": "Authentication_MissingOrMalformed",
"message": {
"lang": "en",
"value": "Access Token missing or malformed."
}
}
}
Как правильно сделать запрос к графическому API?
Вы правы Дмитрий :) Также убедитесь, что ваш ресурс https://graph.windows.net
Я добавил ответ от авторизации, но не уверен, что из этого извлечь. Не могли бы вы проверить?
Вы использовали неправильный ресурс. Токен, который вы получаете, предназначен для API управления Azure. Вам нужно запросить токен для AAD Graph API, установив для ресурса значение https://graph.windows.net
Он говорит «значение»: «Недопустимое доменное имя в URL-адресе запроса».
Обновленный ответ в соответствии с вашим случаем
Хорошо, я показываю шаг с самого начала. Убедитесь, что вы точно выполнили следующий шаг.
Шаг: 1: Регистрация приложения
Перейдите на свой лазурный портал и нажмите azure active directory
. Теперь нажмите App registrations
и введите имя для своего приложения. Убедитесь, что вы выбрали Web app / API
в качестве типа приложения. Ставьте любые Sign on URL
это ни на что не влияет.
См. снимок экрана ниже:
Шаг:2 Конфигурация приложения
Настройте параметры приложения, нажав на опцию settings
. Скопируйте Application Id
, который является вашим идентификатором клиента. Создайте свой client_secret
в меню Key
. Теперь нажмите на опцию Required permission
и нажмите Add
в новом окне. Выберите Select an API
выберите Microsoft Graph
Затем выберите его.
См. снимок экрана ниже
Итак, конфигурация вашего лазурного портала настроена.
Шаг 3. Поток доступа к токену
Для получения токена я использую Процесс предоставления учетных данных клиента OAuth 2.0. Пусть запустится POSTMAN
Введите конечную точку токена, как показано ниже:
https://login.microsoftonline.com/`YourTenantNameOrID`.onmicrosoft.com/oauth2/token
Введите следующие данные в правильном формате:
grant_type:client_credentials
client_id:Your Portal Application ID
client_secret:Your application Key
resource:https://graph.microsoft.com/
Note: I am using Microsoft Graph API so resource has chosen //graph.microsoft.com/
Смотрите скриншот для более подробной информации
Шаг: 4. Проверьте претензии вашего токена
Вы можете убедиться, что ваш токен содержит необходимую информацию, проверив его утверждения на JWT. Вы можете использовать https://jwt.io/ для проверки вашего токена.
См. изображение претензий ниже:
Шаг: 5 Получите доступ к ресурсу Microsoft Graph API
For example : https://graph.microsoft.com/v1.0/users
Вы закончили, нажмите «Отправить» и проверьте свой ответ, как и ожидалось. Подробности смотрите на снимке экрана.
Формат запроса:
Ответ от API:
Note: Make sure you have resource access permission unless you would get access denied error.
Для получения дополнительной информации вы можете посмотреть здесь
Если у вас есть еще путаница, не стесняйтесь спрашивать в строке комментариев. Спасибо и счастливого кодирования!
Пробовал, но та же проблема. Возможно ли, что делегированных разрешений недостаточно?
@ user1298426 Не могли бы вы попробовать сейчас. Я обновил свой ответ с начала до конца. Тем не менее, если у вас есть какие-либо вопросы, не стесняйтесь спрашивать здесь в комментариях. Спасибо.
Я не вижу ключ «scp» в своем токене. Значит ли это, что у меня нет доступа к API?
@user1298426 user1298426 Да, это ... поэтому назначьте разрешение на портале, как я объяснил выше. делайте именно то, что я сделал, вы получите ожидаемый результат. Если у вас все еще есть какие-либо проблемы, не стесняйтесь спрашивать. Спасибо.
Я думаю, когда вы получаете токен oauth2, это не просто access_token, а более сложный объект с несколькими токенами. Только access_token должен следовать за словом «Bearer». Но я не уверен.