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

使用服务主体为用户分配应用角色时权限不足问题排查

问题解决:服务主体调用Graph API分配应用角色权限不足问题

需求与API实现

开发脚本为指定用户添加应用角色,可通过以下Graph API的HTTP请求实现:

curl --silent -X POST -H 'Content-Type: application/json' \
  -H "Authorization: Bearer ${TOKEN}" \
  -d "{\"appRoleId\":\"${AIRLOCK_MANAGER_ROLE_ID}\",\"principalId\":\"${AIRLOCK_MANAGER_USER}\",\"resourceId\":\"${WORKSPACE_APP_REG}\"}" \
  https://graph.microsoft.com/v1.0/servicePrincipals/${WORKSPACE_APP_REG}/appRoleAssignments

测试环境验证

使用启用Privileged Role Administrator权限的个人租户账号,通过以下步骤可正常执行分配:

  • 执行az login完成登录
  • 调用az account get-access-token --resource-type ms-graph获取token
  • 携带该token执行上述POST请求,成功为用户分配应用角色

生产环境问题

生产环境需改用目标应用角色对应的服务主体操作:

  1. 已创建服务主体密钥,通过以下命令登录并获取token:
az login --service-principal --allow-no-subscriptions --tenant "${TENANT_ID}" --username "${CLIENT_ID}" --password "${CLIENT_SECRET}"
  1. 该服务主体可正常调用https://graph.microsoft.com/v1.0/users/${AIRLOCK_MANAGER_USER}/appRoleAssignments查询用户已分配的角色,但执行POST分配应用角色的请求时,提示权限不足。
  2. 已按官方文档尝试为服务主体分配Application.Read.All和AppRoleAssignment.ReadWrite.All权限(均为Application类型且已授予管理员同意),每次修改后等待约20分钟,问题仍存在。

排查与解决

最终定位到两个核心问题:

  • 问题1:在为服务主体分配权限之前就已获取了token,旧token不包含新分配的权限
  • 问题2:需确保分配的Application.Read.All和AppRoleAssignment.ReadWrite.All是Application类型权限(而非Delegated类型)

修正操作:

  1. 确认服务主体已正确配置上述Application类型权限并完成管理员同意
  2. 重新执行登录命令获取新的token
  3. 使用新token执行POST请求,成功完成应用角色分配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:50:22