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. 要授予应用程序权限,我在API服务主体的appRoleAssignedTo集合中创建了应用程序角色分配: 请求如下:

    发布请求:

    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请求网址中的
  4. “ id”和“ resource_id”相同。 (从“ requiredResourceAccess”中获取“ resourceAppId”值,该值与上面给出的“ approle_id”相对应)

运行查询后,出现错误404。 “代码”:“ Request_ResourceNotFound” 用于“ resource_id” /“ id”字段。

  • 添加屏幕截图以更好地理解:
  1. 创建应用:

enter image description here

  1. 服务主体创建:

enter image description here

  1. 为服务主体授予appRoleAssignment:

enter image description here

我对于在哪里使用哪些ID感到困惑,并且从文档中没有得到清晰的主意。有人可以解决我的查询吗?预先感谢。

解决方法

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

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

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

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

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

,

document的描述不是很清楚。

简单来说:

principalId:通常是您的服务主体ID。

resourceId:通常是您的服务主体ID。

appRoleId:对于appRoleId,您可以通过请求GET https://graph.microsoft.com/v1.0/servicePrincipals/{id}.来找到它 enter image description here

为服务主体授予appRoleAssignment: enter image description here