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

如何授予应用读取Azure账单数据权限?调用接口遇401未授权

解决EA租户调用Azure Consumption API(Reservation Summaries)的401未授权问题

问题根源

你能通过Graph API读取订阅,说明应用身份认证流程正常,但Consumption类API属于Azure管理API(ARM)体系,和Graph API的权限体系完全独立,且EA租户的账单/消费权限需要特定的RBAC配置逻辑。

解决步骤

1. 给服务主体分配正确的RBAC角色

针对EA租户的Reservation Summaries这类Consumption接口,必须给你的应用服务主体分配**账单读取者(Billing Reader)**角色,且权限要覆盖根账单账户:

  • 登录Azure门户,进入「成本管理 + 账单」,找到你的EA账单账户
  • 左侧菜单选择「访问控制(IAM)」,点击「添加角色分配」
  • 角色选择「账单读取者」,分配对象指定你的应用注册(服务主体),确保作用范围是根账单账户(不能仅限定单个订阅)

2. 调整令牌请求的Scope

调用ARM类API时,获取令牌的Scope必须设置为https://management.azure.com/.default,不能使用Graph API的Scope。以MSAL.NET为例,代码示例如下:

var scopes = new[] { "https://management.azure.com/.default" };
var authResult = await confidentialClientApp.AcquireTokenForClient(scopes).ExecuteAsync();

其他语言的MSAL库同理,需将Scope指定为ARM的默认范围,否则令牌受众不符合API要求,会触发401错误。

3. 验证令牌合法性

使用jwt.ms解码你的令牌,确认aud字段值为https://management.azure.com/——这是ARM API的合法受众标识,若该值错误,必然会被API拒绝访问。

关于是否需要创建用户账户

不需要。你的应用注册(服务主体)本身就是独立的身份实体,只要完成上述RBAC角色分配和令牌配置,就能直接以服务主体身份调用Consumption API,无需创建专门的用户账户模拟登录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:40:06