Azure AD: предоставление appRoleAssignment для субъекта-службы завершается ошибкой с "кодом": "Request_ResourceNotFound"

Я пытаюсь создать "субъект-службу" для приложения и предоставить согласие администратора на разрешения с помощью Microsoft Graph API.

Я выполнил следующие шаги:

  1. Создал приложение в арендаторе с использованием графического API. Тело моего запроса:

             {
      "displayName": "AppWithPermissions",
      "requiredResourceAccess": [
        {
          "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
          "resourceAccess": [
            {
              "id": "dc890d15-9560-4a4c-9b7f-a736ec74ec40",
              "type": "Role"
            }
          ]
        }
      ]
    }
    
  2. Создал субъект-службу для созданного выше приложения. Создание прошло успешно.

  3. Теперь я хочу предоставить согласие администратора на каждое назначенное разрешение программно с помощью графического API.

  4. Чтобы предоставить разрешения приложения, я создал назначение роли приложения в коллекции appRoleAssignedTo субъекта-службы API: Запрос был следующим:

    Отправить запрос:

             https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
    

    Тело запроса:

             {
        "principalId": "principal_id",
        "resourceId": "resource_id",
        "appRoleId": "approle_id"
    }
    

Вот,

  1. "Principal_id" - это "идентификатор" принципала службы, созданного на шаге 2 выше.
  2. Approle_id - это идентификатор appRole, который вы хотите предоставить. (взято значение "id" из массива "resourceAccess", присутствующего в "requiredResourceAccess")
  3. "id" в URL-адресе http-запроса и "resource_id" совпадают. (взято значение "resourceAppId" из "requiredResourceAccess", которое соответствует "Approle_id", приведенному выше)

После выполнения запроса я получаю ошибку 404. "code": "Request_ResourceNotFound" для поля "resource_id"/"id".

  • Добавляем скриншоты для лучшего понимания:
  1. Создание приложения:

  1. создание принципала службы:

  1. Предоставьте объекту службы 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}.

Предоставьте объекту службы appRoleAssignment:

Другие вопросы по тегам