能否为用户分配的托管标识分配API权限?
用户分配型托管标识的API权限配置与令牌获取
一、能否分配API权限?
完全可以。用户分配型托管标识属于Azure AD中的特殊服务主体,支持像普通应用注册一样分配API权限,包括Microsoft Graph API及自定义API的权限,常用场景为应用权限分配。
二、配置步骤
1. 分配Microsoft Graph API权限
- 进入Azure门户,找到目标用户分配型托管标识
- 切换至API权限选项卡,点击添加权限
- 选择Microsoft Graph,按需勾选应用权限(托管标识无用户上下文,优先使用应用权限),例如
User.Read.All、Mail.Send等 - 添加权限后,需由全局管理员或权限管理员完成授予管理员同意(应用权限必须经同意才可生效)
2. 分配自定义API权限
- 确保自定义API已在Azure AD完成应用注册,并完成公开API配置、定义好所需权限
- 返回托管标识的API权限页面,点击添加权限
- 选择我的API,找到你的自定义API应用注册
- 勾选对应权限类型(推荐应用权限),添加后完成管理员同意(应用权限需此步骤)
三、获取访问令牌调用API
1. 通过Azure实例元数据服务(IMDS)获取(Azure资源上的托管标识适用)
发送HTTP请求:
GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://graph.microsoft.com HTTP/1.1 Metadata: true
将resource参数替换为自定义API的应用ID URI(如api://your-custom-api-client-id),即可获取对应API的访问令牌。
2. 使用Azure CLI获取(测试场景适用)
执行命令:
az account get-access-token --resource https://graph.microsoft.com --identity --username /subscriptions/{订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{托管标识名}
替换resource为目标API的标识符即可。
四、关键注意事项
- 托管标识仅支持应用权限的管理员同意,不支持用户同意流程
- 委派权限依赖用户上下文,托管标识无法直接使用(特殊场景可通过On-Behalf-Of流程,但适用范围有限)
- 自定义API需正确配置应用注册的权限定义与暴露规则,否则无法被托管标识识别
内容的提问来源于stack exchange,提问作者Allan Xu
相关产品推荐
相关产品推荐

