You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Microsoft Graph API替代Azure Portal实现用户应用角色分配

通过Microsoft Graph API实现应用角色分配

一、准备必要权限

首先得确保你用来调用Graph API的服务主体(如果用用户身份调用,该用户需是管理员)拥有**AppRoleAssignment.ReadWrite.All权限——这是最小权限,也可用权限更大的Directory.ReadWrite.All,但尽量遵循最小权限原则。注意这个权限必须经过全局管理员或特权角色管理员同意**,因为应用角色分配属于敏感操作。

二、获取三个核心ID

调用API前必须拿到以下三个ID:

  • 用户ID:目标用户的objectId。调用GET /users/{userPrincipalName}(替换{userPrincipalName}为用户邮箱或用户主体名),取返回结果里的id字段。
  • 服务主体ID:要分配角色的应用对应的服务主体objectId。调用GET /servicePrincipals?$filter=displayName eq '{应用显示名称}',找到对应应用的id字段。
  • 应用角色ID:要分配的具体应用角色的id。调用GET /servicePrincipals/{服务主体ID},在返回的appRoles数组中,找到allowedMemberTypes包含"User"的目标角色,取它的id字段(给服务主体分配角色才选包含"Application"的)。

三、调用API创建分配

用POST请求调用POST /users/{用户ID}/appRoleAssignments,请求体格式如下:

{
  "principalId": "{用户的objectId}",
  "resourceId": "{应用服务主体的objectId}",
  "appRoleId": "{目标应用角色的id}"
}

PowerShell示例(用Microsoft Graph模块)

先安装模块并登录(确保登录账号有管理员权限):

Install-Module Microsoft.Graph -Scope CurrentUser -Force
Connect-MgGraph -Scopes "AppRoleAssignment.ReadWrite.All"

然后执行分配:

# 替换成你的实际ID
$userId = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
$resourceId = "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyy"
$appRoleId = "zzzzzz-zzzz-zzzz-zzzz-zzzzzzzzz"

$params = @{
    principalId = $userId
    resourceId = $resourceId
    appRoleId = $appRoleId
}

New-MgUserAppRoleAssignment -UserId $userId -BodyParameter $params

HTTP请求示例(比如用Postman)

  • 请求方法:POST
  • 请求URL:https://graph.microsoft.com/v1.0/users/{用户ID}/appRoleAssignments
  • 请求头:Authorization: Bearer {你的访问令牌}(令牌需包含AppRoleAssignment.ReadWrite.All权限)
  • 请求体:替换占位符后的上述JSON内容

四、验证分配结果

可以通过两种方式验证:

  • 调用GET /users/{用户ID}/appRoleAssignments,查看返回列表是否包含刚创建的分配项
  • 调用GET /servicePrincipals/{服务主体ID}/appRoleAssignedTo,查看该应用下的角色分配列表,确认目标用户在列

内容的提问来源于stack exchange,提问作者Shivlord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:36:15