1

我正在尝试为应用程序创建一个“服务主体”,并使用 Microsoft 图形 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请求url中的“id”和“resource_id”是一样的。(从“requiredResourceAccess”中获取“resourceAppId”值,对应于上面给出的“approle_id”)

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

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

在此处输入图像描述

  1. 服务主体创建:

在此处输入图像描述

  1. 为服务主体授予 appRoleAssignment:

在此处输入图像描述

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

4

2 回答 2

2

看起来您使用的是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属性,您可以在创建应用程序角色分配时使用它。

于 2020-10-12T13:10:16.530 回答
-2

文档描述不是很清楚。

简单来说:

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

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

appRoleId:对于 appRoleId,您可以通过请求找到它GET https://graph.microsoft.com/v1.0/servicePrincipals/{id}. 在此处输入图像描述

为服务主体授予 appRoleAssignment: 在此处输入图像描述

于 2020-10-12T10:12:59.217 回答