如何检查Azure应用注册的API权限是否需要管理员同意?
解决Azure应用注册权限管理员同意状态检查问题
问题分析
az ad app permission list命令仅会列出已配置的权限,不会返回该权限是否已获得管理员同意的状态,这就是你每次执行都得到相同结果的原因。要检查权限是否已被同意,需要结合az ad app permission grant list命令来对比已授予的权限。
解决方案步骤
- 先获取应用注册上配置的所有权限(分为应用权限
Role和委派权限Scope) - 获取已被管理员授予的权限列表
- 对比两者,找出尚未获得同意的权限
示例PowerShell脚本
$appId = "你的应用注册ID" # 获取配置的所有权限 $configuredPermissions = az ad app permission list --id $appId --output json | ConvertFrom-Json # 获取已授予的权限 $grantedPermissions = az ad app permission grant list --id $appId --output json | ConvertFrom-Json # 检查应用权限(Role类型)的同意状态 foreach ($resource in $configuredPermissions) { foreach ($access in $resource.resourceAccess) { if ($access.type -eq "Role") { $permissionId = $access.id $resourceAppId = $resource.resourceAppId # 查找是否存在对应的已授予权限 $isGranted = $grantedPermissions | Where-Object { $_.resourceId -eq $resourceAppId -and $_.permissionId -eq $permissionId -and $_.grantType -eq "Application" } if (-not $isGranted) { Write-Host "应用权限 $permissionId (资源ID: $resourceAppId) 未获得管理员同意" } } } } # 检查委派权限(Scope类型)的管理员同意状态 foreach ($resource in $configuredPermissions) { foreach ($access in $resource.resourceAccess) { if ($access.type -eq "Scope") { $permissionId = $access.id $resourceAppId = $resource.resourceAppId # 查找是否存在管理员同意的委派权限(consentType为AllPrincipals表示管理员同意所有用户) $isGranted = $grantedPermissions | Where-Object { $_.resourceId -eq $resourceAppId -and $_.permissionId -eq $permissionId -and $_.consentType -eq "AllPrincipals" } if (-not $isGranted) { Write-Host "委派权限 $permissionId (资源ID: $resourceAppId) 未获得管理员同意" } } } }
关键说明
- 应用权限的同意状态通过
grantType = Application判断,代表已授予应用级别的权限 - 委派权限的管理员同意通过
consentType = AllPrincipals判断,代表管理员已同意所有用户使用该权限 - 如果是仅针对特定用户的委派同意,
consentType会是Principal,这种情况不属于管理员全局同意
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

