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

Angular应用调用Azure Resource Manager API遇权限范围错误排查

解决AADSTS650053错误:调用Azure ARM API身份验证失败

错误核心原因

AADSTS650053提示的user_impersonation范围不存在,本质是应用注册未配置对应权限,或请求Token的范围与认证流程不匹配导致的。

分步解决

1. 配置应用注册的ARM API权限

  • 登录Azure门户,定位到你的应用注册「Partner Center Web App 3」
  • 进入「API权限」页面,点击「添加权限」
  • 在权限面板中选择「Microsoft APIs」,找到「Azure Service Management」(即ARM API)
  • 选择「委托权限」,勾选user_impersonation权限后点击「添加权限」
  • 若为租户级应用,需点击「授予管理员同意」(否则需用户自行授权)

2. 修正Token请求范围

根据你使用的认证流调整范围:

  • 委托流(用户登录后获取Token):保持范围为https://management.azure.com/user_impersonation,确保拼写完全正确(含协议头与斜杠)
  • 客户端凭据流(无用户登录,以应用身份请求):将范围改为https://management.azure.com/.default,此流使用应用权限而非委托权限

3. 验证API请求头格式

调用ARM API时,确保Authorization头格式正确:

headers: {
  'Authorization': `Bearer ${yourToken}`,
  'Accept': 'application/json'
}

4. 确认订阅访问权限

检查当前用户/应用是否拥有目标订阅的访问权限(如参与者、读者角色),可在Azure门户的订阅「访问控制(IAM)」页面配置。

代码示例修正

假设使用委托流,修正后的fetchAzureResources方法如下:

async fetchAzureResources(): Promise<any> {
  // 确保范围正确
  const scope = 'https://management.azure.com/user_impersonation';
  const token = await this.getAuthToken(scope); // 你的Token获取逻辑

  const apiUrl = 'https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxx/resources?api-version=2021-04-01';
  const response = await fetch(apiUrl, {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Accept': 'application/json'
    }
  });

  if (!response.ok) {
    throw new Error(`API请求失败: ${response.statusText}`);
  }

  return await response.json();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:32:11