Получение ролей приложений для пользователей, ограниченных запрашивающим приложением

#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.