如何为用户分配的托管标识分配Microsoft Graph API权限?
用户分配托管标识配置Microsoft Graph API权限的支持说明及解决方法
结论:完全支持
用户分配的托管标识本质是Azure AD中的服务主体,和系统分配的托管标识一样,可以正常配置Microsoft Graph的应用权限(注意:托管标识仅支持应用权限,不支持委派权限)。
为什么会出现权限不足?
即使是全局管理员账号,也可能因为以下原因报错:
- 操作时未使用正确权限范围:管理服务主体的权限分配需要
Application.ReadWrite.All权限,或对应管理员角色(云应用管理员/应用程序管理员),部分受限全局管理员账号可能被限制了该权限。 - 操作步骤错误:比如误选了委派权限,或者未完成「授予管理员同意」的关键步骤。
正确操作步骤(以PowerShell为例)
参考Stack Overflow上的方案,整理成中文操作流程:
- 连接Microsoft Graph,需申请足够权限:
Connect-MgGraph -Scopes "Application.ReadWrite.All", "Directory.Read.All"
- 获取用户分配托管标识的服务主体信息:
# 替换为你的托管标识显示名称 $msi = Get-MgServicePrincipal -Filter "displayName eq '你的托管标识名称'"
- 获取Microsoft Graph的服务主体(固定AppID,无需修改):
$graphSP = Get-MgServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"
- 定位要分配的应用权限ID,以
User.Read.All为例:
# 替换为你需要的权限值,确保筛选的是应用权限 $permission = $graphSP.AppRoles | Where-Object { $_.Value -eq "User.Read.All" -and $_.AllowedMemberTypes -contains "Application" }
- 执行权限分配:
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $msi.Id -PrincipalId $msi.Id -ResourceId $graphSP.Id -AppRoleId $permission.Id
门户操作步骤
如果习惯用Azure Portal:
- 进入「Azure Active Directory」→「企业应用程序」
- 搜索并找到你的用户分配托管标识
- 进入「权限」→「添加权限」→ 选择「Microsoft Graph」
- 选择「应用权限」,勾选需要的权限后点击「添加权限」
- 最后点击「授予管理员同意」(必须完成这一步,权限才会生效)
内容的提问来源于stack exchange,提问作者bmkaiser
相关产品推荐
相关产品推荐

