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

多租户应用OAuth2授权码流获取的Access Token调用Azure API报401错误

问题分析与解决方案

你拿到的EwBYA8l6BAAURSN/FHlDW5xN74t6GzbtsBBeBUYAAZDe7JE/MPLoAi+Fr+1Xxq5eBe5N9l8Q+c4QjkY5PGEzRnBpPe7+v6h+PLdh1cceBQx+/JsB2QCrYSCt7x/zGsQAhwoY/格式的token不是针对Azure管理API的有效JWT令牌,这正是调用API返回401 InvalidAuthenticationToken错误的核心原因。

为什么会拿到这种格式的token?

你当前请求授权时的scope参数只包含了openid offline_access——这两个都是OpenID Connect身份验证相关的范围,用于获取用户身份信息和刷新令牌,但完全没有涉及Azure管理API的权限范围。Azure AD会根据你请求的scope返回对应类型的令牌:当scope不包含目标API的权限时,返回的是通用的持有者令牌(非JWT格式),这种令牌无法被Azure管理API识别和验证。

解决步骤

要获取能调用Azure管理API的有效JWT令牌,你需要做以下调整:

  1. 更新授权URL的scope参数
    在原有的scope中添加Azure管理API的权限范围https://management.azure.com/user_impersonation,修改后的授权URL应为:

    https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=my_id&prompt=consent&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauthorize&response_type=code&scope=openid+offline_access+https%3A%2F%2Fmanagement.azure.com%2Fuser_impersonation&state=17
    

    注意要对URL中的特殊字符进行正确编码,比如https://management.azure.com/user_impersonation要编码成https%3A%2F%2Fmanagement.azure.com%2Fuser_impersonation。

  2. 确认应用已配置正确的API权限
    登录Azure门户,检查你的应用注册:

    • 转到“API权限”页面
    • 确保已添加“Azure Service Management”的user_impersonation权限
    • 如果是多租户应用且需要管理员级别的访问,确保该权限已获得管理员同意
  3. 重新获取令牌并验证
    使用更新后的授权URL重新发起授权流程,获取新的auth_code后请求token。此时拿到的access_token应该是标准的JWT格式(以eyJ0eXAiOiJKV1Qi...开头)。
    你可以用JWT解码工具查看令牌内容,确认aud(受众)字段的值为https://management.azure.com——这是令牌针对Azure管理API的关键标识。

  4. 用新令牌调用API
    使用新的JWT格式access_token调用Azure管理API,此时应该能正常返回数据,不会再出现401错误。

补充说明

那种以Ew开头的非JWT令牌,通常是Azure AD针对旧版API(比如Azure AD Graph)或通用身份场景返回的,它的受众和权限范围与Azure管理API不匹配,因此无法被后者识别。只有当请求的scope包含目标API的权限时,Azure AD才会返回针对该API的JWT令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:31:18