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

如何验证通过组分配应用角色的服务主体是否拥有该角色?

问题解决:Azure ARC服务主体通过组分配应用角色后令牌无角色声明的验证与解决办法

一、如何验证服务主体因组身份拥有正确的应用角色

  • 通过Microsoft Graph查询权限关系
    1. 确认目标组已分配API的Readers角色:调用GET /groups/{组ID}/appRoleAssignments,检查返回结果中是否存在针对你的API应用注册的Readers角色分配记录。
    2. 验证服务主体属于该组:调用GET /servicePrincipals/{服务主体ID}/memberOf,查看返回的组列表是否包含上述已分配角色的组。
  • 通过Azure CLI快速核查
    • 查看组的应用角色分配:az ad group show --id {组ID} --query "appRoleAssignments"
    • 查看服务主体的所属组:az ad sp show --id {服务主体ID} --query "memberOf"
  • 实际API访问测试
    用该服务主体获取的令牌直接调用API中需要Readers角色的接口,如果能正常访问,说明权限已生效(即使令牌里没有roles声明)。

二、可行的解决办法

1. 直接为单个服务主体分配应用角色

针对每台Azure ARC服务器的服务主体,直接分配Readers应用角色。这种方式能确保令牌中包含roles声明,适合服务器数量较少的场景。操作路径:Azure门户→Azure AD→应用注册→你的API应用→应用角色分配→添加分配→选择服务主体→指定Readers角色。

2. 修改API的权限验证逻辑

API在收到请求时,不要仅依赖令牌内的roles声明,而是主动通过Microsoft Graph做二次验证:

  1. 从令牌中提取服务主体ID;
  2. 查询该服务主体的所有所属组;
  3. 检查这些组中是否存在已被分配Readers角色的组;
  4. 若存在,则允许访问对应的资源。

3. 启用组声明辅助验证

在你的API应用注册的“令牌配置”中添加组声明(可选择组ID或组名称),让令牌中包含服务主体所属的组信息。API后续可以通过这些组信息,关联预先维护的“组-角色”映射关系来完成权限验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:47