Azure AD: предоставление appRoleAssignment для субъекта-службы завершается ошибкой с "кодом": "Request_ResourceNotFound"
Я пытаюсь создать "субъект-службу" для приложения и предоставить согласие администратора на разрешения с помощью Microsoft Graph API.
Я выполнил следующие шаги:
Создал приложение в арендаторе с использованием графического API. Тело моего запроса:
{ "displayName": "AppWithPermissions", "requiredResourceAccess": [ { "resourceAppId": "00000002-0000-0ff1-ce00-000000000000", "resourceAccess": [ { "id": "dc890d15-9560-4a4c-9b7f-a736ec74ec40", "type": "Role" } ] } ] }
Создал субъект-службу для созданного выше приложения. Создание прошло успешно.
Теперь я хочу предоставить согласие администратора на каждое назначенное разрешение программно с помощью графического API.
Чтобы предоставить разрешения приложения, я создал назначение роли приложения в коллекции appRoleAssignedTo субъекта-службы API: Запрос был следующим:
Отправить запрос:
https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
Тело запроса:
{ "principalId": "principal_id", "resourceId": "resource_id", "appRoleId": "approle_id" }
Вот,
- "Principal_id" - это "идентификатор" принципала службы, созданного на шаге 2 выше.
- Approle_id - это идентификатор appRole, который вы хотите предоставить. (взято значение "id" из массива "resourceAccess", присутствующего в "requiredResourceAccess")
- "id" в URL-адресе http-запроса и "resource_id" совпадают. (взято значение "resourceAppId" из "requiredResourceAccess", которое соответствует "Approle_id", приведенному выше)
После выполнения запроса я получаю ошибку 404. "code": "Request_ResourceNotFound" для поля "resource_id"/"id".
- Добавляем скриншоты для лучшего понимания:
- Создание приложения:
- создание принципала службы:
- Предоставьте объекту службы appRoleAssignment:
Я не понимаю, какие идентификаторы и где использовать, и не получил четкого представления из документации. Может ли кто-нибудь разрешить мой вопрос? Заранее спасибо.
2 ответа
Похоже, вы используете appId вместо значения id.
В назначении роли приложения
resourceId
это идентификатор из servicePrincipal для приложения ресурсов (в вашем случае, API). В requiredResourceAccess объекта приложения вы используете appId, который представляет собой другое значение.
Чтобы найти идентификатор субъекта- службы, для которого известен appId:
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '{app-id}'
Ответ будет содержать свойство id объекта servicePrincipal, и вы можете использовать его при создании назначения роли приложения.
Описание документа не очень четкое.
Проще говоря:
principalId
: Обычно идентификатор вашей службы.
resourceId
: Обычно идентификатор вашей службы.
appRoleId
: Для appRoleId вы можете найти его, запросив
GET https://graph.microsoft.com/v1.0/servicePrincipals/{id}.