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

Azure CLI创建带Microsoft Graph权限的SP时管理员同意失败排查

问题根源

你脚本中的权限ID查询逻辑和实际分配的权限类型不匹配:

  • 你写的getPermissionId函数查询的是oauth2Permissions属性,这是委托权限的ID存储位置
  • 你调用az ad app permission add时指定的是=Role标记,代表要分配应用权限,这类权限的ID存储在appRoles属性下,二者ID完全不互通,因此传入的ID在Microsoft Graph资源的应用权限列表中不存在,触发报错。

另外你脚本中的az ad app permission grant是给委托权限授予同意的命令,分配应用权限不需要执行这一步,多余的调用反而可能导致冲突。

修正后的完整脚本
#!/bin/bash

## Usage: ./setup-sp.sh <app-name>
set -eou pipefail

getPermissionId () {
  # $1 = 应用权限名称,例如 User.ReadWrite.All
  az ad sp list \
    --query "[?appDisplayName=='Microsoft Graph'].appRoles[?value=='$1'].id" \
    --all \
    --output tsv
}

APP_NAME=$1

echo "获取订阅ID"
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
echo "订阅ID为: $SUBSCRIPTION_ID"

echo "创建应用注册和关联的服务主体"
SP=$(az ad sp create-for-rbac --role Contributor --name $APP_NAME --scopes /subscriptions/$SUBSCRIPTION_ID)

echo "以下是你的服务主体凭证,请妥善存储!"
echo $SP

APP_ID=$(echo $SP | jq -r .appId)
echo "应用ID为: $APP_ID"

# Microsoft Graph API 固定ID
API_ID="00000003-0000-0000-c000-000000000000"

# 获取各类应用权限的ID
echo "正在获取API权限ID"
USER_READWRITE_ALL_ID=$(getPermissionId User.ReadWrite.All)
GROUP_READWRITE_ALL_ID=$(getPermissionId Group.ReadWrite.All)
APPLICATION_READWRITE_ALL_ID=$(getPermissionId Application.ReadWrite.All)

# 给服务主体添加权限
echo "正在添加API权限到服务主体"
az ad app permission add \
  --id $APP_ID \
  --api $API_ID \
  --api-permissions \
      $USER_READWRITE_ALL_ID=Role \
      $GROUP_READWRITE_ALL_ID=Role \
      $APPLICATION_READWRITE_ALL_ID=Role

# 等待权限配置同步,避免后续同意失败
sleep 2

echo "正在为API权限授予管理员同意"
az ad app permission admin-consent --id $APP_ID

echo "操作完成。你可以在Azure门户中查看你的服务主体配置"
注意事项
  • 运行脚本的账号需要持有全局管理员、应用管理员或者云应用管理员角色,才有权限给应用权限授予管理员同意
  • 如果运行失败,可以先删除已经创建的同名应用注册,再重试脚本,避免残留配置导致冲突
  • 如果你实际需要分配的是委托权限,请将getPermissionId的查询属性改回oauth2Permissions,同时将权限配置中的=Role改为=Scope,再恢复原来的az ad app permission grant调用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:24:02