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

Azure中能否将用户分配的托管标识用于应用注册?含RBAC场景需求

解决方案:结合App Registration角色与托管标识实现无密码RBAC

核心结论

完全可以通过Azure CLI或Graph API实现你的需求:保留现有App Registration的角色定义体系,同时用托管标识替代普通服务主体完成服务间无密码认证,无需维护客户端密钥或证书。

具体实施步骤

1. 保留现有App Registration的角色配置

继续在A和B的App Registration中定义所需的应用角色(Application Roles),比如为API B定义B_Executor、B_Reader等角色,这些角色将用于后续给用户/组/托管标识分配权限。

2. 为API服务配置托管标识

给运行API A的服务(如Azure App Service、Function App、VM等)启用托管标识:

  • 系统分配托管标识:直接在服务的"身份"设置中启用,自动生成唯一的服务主体,生命周期与服务绑定。
  • 用户分配托管标识:先创建独立的用户分配托管标识,再关联到API A服务,可跨多个资源复用。

3. 将托管标识分配给目标API的App角色

托管标识本质是特殊的服务主体,可直接被分配App Registration的应用角色,操作方式如下:

  • Azure CLI命令:
    # 分配API B的App角色给API A的托管标识
    az ad app role assignment create \
      --assignee <托管标识的Object ID> \
      --resource <API B的App Registration的Object ID> \
      --role "<API B中定义的角色名称>"
    
  • Graph API请求:
    向POST https://graph.microsoft.com/v1.0/servicePrincipals/<托管标识的服务主体ID>/appRoleAssignments发送请求体:
    {
      "principalId": "<托管标识的Object ID>",
      "resourceId": "<API B的App Registration对应的服务主体ID>",
      "appRoleId": "<API B中目标角色的ID>"
    }
    

4. 实现服务间无密码认证与授权

  • API A获取访问令牌:利用托管标识的本地元数据端点获取API B的访问令牌,无需存储任何密钥。例如在Azure服务中,请求:
    GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=<API B的App ID或Application ID URI>
    
  • API B验证令牌:在API逻辑中检查令牌的aud(受众)是否匹配自身App ID,同时校验roles声明是否包含已分配的角色,以此完成RBAC授权。

关键注意事项

  • 无需将托管标识转换为App Registration,只需将其作为角色分配的主体即可,完美结合App Registration的角色定义能力与托管标识的无密码特性。
  • 系统分配托管标识更适合单一资源绑定场景,用户分配托管标识适合多资源复用的场景。
  • 托管标识的令牌由Azure自动维护,无需手动轮换密钥,彻底消除密码管理开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:30