#azure-active-directory #microsoft-graph-api
#azure-active-directory #microsoft-graph-api
Вопрос:
Я использую поток OAuth 2 ROPC для приложения для аутентификации пользователя, и я хочу знать, какие роли были назначены для этого пользователя, чтобы приложение знало, какие функции нужно включить / отключить.
Я успешно получил все роли приложений для пользователя, нажав https://graph.microsoft.com/v1.0/me/appRoleAssignments REST url с текущим маркером доступа в заголовке. Однако меня действительно не волнуют какие-либо роли, кроме ролей, которые пользователь имеет для приложения, из которого он делает запрос. Есть ли способ ограничить его приложением, отправляющим запрос, или конкретным client_id?
Комментарии:
1. Какие-либо обновления по этой проблеме?
2. @JoyWang работает над тестированием ответа.
Ответ №1:
Другой ответ неверен, вам необходимо выполнить фильтрацию с Object ID
использованием соответствующего участника службы приложения, а не Object ID
приложения.
Во-первых, используйте приведенный ниже запрос, чтобы получить имя Object ID
соответствующего участника службы приложения, замените <client_id>
его своим.
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '<client_id>'amp;$select=id
Затем используйте запрос, чтобы получить appRoleAssignments
, передайте id
вышеуказанное в запрос.
Примечание: Нет ''
окружающего 978xxxx383d52bf
.
GET https://graph.microsoft.com/v1.0/me/appRoleAssignments?$filter=resourceId eq 978xxxx383d52bf
Комментарии:
1. Результатом на втором шаге является ошибка: { «code»: «Request_ResourceNotFound», ….
2. @ChristopherPisz Можете ли вы убедиться, что у пользователя есть роль из целевого приложения? Похоже, он не делает этого из-за ошибки.
3. @JoyWang на самом деле, но мой ответ правильный, его проблема теперь в авторизации 🙂
4. У меня есть роль приложения с приложением, которое является идентификатором клиента. Я настроил его сам и могу увидеть, если я сделаю запрос для всех своих ролей, используя graph.microsoft.com/v1.0/me/appRoleAssignments без фильтра
5. Заставил это работать. Пришлось немного поиграть с этим в Postman
Ответ №2:
Вы можете с помощью этого:
GET https://graph.microsoft.com/v1.0/me/appRoleAssignments?$filter=resourceId eq <application object (not app) id>
Чтобы получить идентификатор объекта приложения:
GET https://graph.microsoft.com/v1.0/applications?$filter=appId eq '<application app (client) id>'amp;$select=id
Комментарии:
1. Результатом на первом шаге является «ошибка»: { «code»: «Authorization_RequestDenied», ….
2. @ChristopherPisz пожалуйста, поделитесь полной информацией об ошибке и кодом состояния ответа.
3. { «ошибка»: { «code»: «Authorization_RequestDenied», «сообщение»: «Недостаточно привилегий для завершения операции.», «innerError»: { «дата»: «2021-01-06T15:44:19», «request-id»: «<идентификатор>»,»client-request-id»: «<другой идентификатор>» } } }
4. Код состояния — 403 Запрещено
Ответ №3:
Вы можете настроить токены, которые будут получать роли приложений в токене, и вам не нужно выполнять дополнительный вызов Graph API.