Azure AD:为服务主体授予 appRoleAssignment 失败 "code":"Request_ResourceNotFound"

Azure AD: Grant an appRoleAssignment for a service principal is failing with "code": "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. 为了授予应用程序权限,我在 API 的服务主体的 appRoleAssignedTo 集合中创建了一个应用程序角色分配: 请求如下:

    Post请求:

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

    请求正文:

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

这里,

  1. “principal_id”是上面第 2 步中创建的服务主体的“id”。
  2. "approle_id" 是您要授予的 appRole 的 ID。 (从“requiredResourceAccess”中存在的“resourceAccess”数组中获取“id”值)
  3. http请求中的“id”url和“resource_id”是一样的。 (从对应于上面给出的“approle_id”的“requiredResourceAccess”中获取“resourceAppId”值)

在 运行 查询之后,我收到错误 404。 “代码”:“Request_ResourceNotFound” 对于“resource_id”/“id”字段。

  1. 应用创建:

  1. 服务主体创建:

  1. 为服务主体授予 appRoleAssignment:

我对在哪里使用哪些 ID 感到困惑,并且没有从文档中得到一个清晰的想法。任何人都可以解决我的查询吗?提前致谢。

document描述的不是很清楚

简单来说:

principalId:通常是你的服务主体id。

resourceId: 通常是你的服务主体id。

appRoleId:appRoleId可以通过请求GET https://graph.microsoft.com/v1.0/servicePrincipals/{id}.找到

为服务主体授予 appRoleAssignment:

您似乎在使用 appId 而不是 id 值。

在应用角色分配中,resourceId 是资源应用的 servicePrincipalid(在您的情况下, API).在 application 对象的 requiredResourceAccess 中,您使用 appId,这是一个不同的值。

查找您知道 appId 的服务主体的 id:

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '{app-id}'

响应将包含 servicePrincipal 对象的 id 属性,您可以在创建应用程序时使用它角色分配。