问题描述
我正在尝试为应用程序创建一个“服务主体”,并使用Microsoft graph API授予管理员对该权限的同意。
我遵循以下步骤:
-
使用图形API在租户中创建的应用程序。我的请求正文是:
{ "displayName": "AppWithPermissions","requiredResourceAccess": [ { "resourceAppId": "00000002-0000-0ff1-ce00-000000000000","resourceAccess": [ { "id": "dc890d15-9560-4a4c-9b7f-a736ec74ec40","type": "Role" } ] } ] }
-
为上述创建的应用程序创建了服务主体。创建成功。
-
现在,我想使用图形API通过编程方式为每个分配的权限授予管理员同意。
-
要授予应用程序权限,我在API服务主体的appRoleAssignedTo集合中创建了应用程序角色分配: 请求如下:
发布请求:
https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
请求正文:
{ "principalId": "principal_id","resourceId": "resource_id","appRoleId": "approle_id" }
- “ principal_id”是在上面的步骤2中创建的服务主体的“ id”。
- “ approle_id”是您要授予的appRole的ID。 (从“ requiredResourceAccess”中的“ resourceAccess”数组中获取“ id”值) http请求网址中的
- “ id”和“ resource_id”相同。 (从“ requiredResourceAccess”中获取“ resourceAppId”值,该值与上面给出的“ approle_id”相对应)
运行查询后,出现错误404。 “代码”:“ Request_ResourceNotFound” 用于“ resource_id” /“ id”字段。
- 添加屏幕截图以更好地理解:
- 创建应用:
- 服务主体创建:
- 为服务主体授予appRoleAssignment:
我对于在哪里使用哪些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}.
来找到它