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

调用Azure AD注册API返回invalid_token签名无效问题排查

Azure AD客户端凭据流调用受保护API返回401 invalid_token(签名无效)排查

问题场景

计划使用客户端凭据流(client credential flow)保护自有API,前置已完成配置:

  • 在Azure Active Directory中注册应用
  • 为应用添加User.ReadAll权限并完成管理员授权
  • 生成对应客户端密钥(client secret)

API项目核心代码如下:

Program.cs 鉴权配置

builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration);
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();

appsettings.json AzureAD节点配置

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "myazure.onmicrosoft.com",
    "TenantId": "4b49fd73-aaaa-zzzz-xxxx-101385c03aaa",
    "ClientId": "226a511d-8888-7777-6666-c1897e7d4ccc"
  }
}

受保护接口控制器

[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

故障现象

向https://login.microsoftonline.com/mytenant/oauth2/v2.0/token端点发起POST请求获取访问令牌,经jwt.ms校验令牌格式无异常,但使用该令牌调用API时返回401状态码,错误详情:

Bearer error="invalid_token", error_description="The signature is invalid"


根因与修复方案

该错误由Azure AD的应用注册角色隔离机制导致:Azure AD明确区分API服务端注册和客户端调用方注册两类应用实体,无法直接使用API自身对应的应用注册获取令牌调用自身。
修复操作步骤:

  • 保留原有配置在API项目中的Azure AD应用注册,该应用是API服务端的身份标识,仅用于令牌签名校验,不要使用它的客户端ID/密钥发起令牌请求
  • 单独为API的消费方(即调用API的后端服务/客户端)注册新的Azure AD应用,为该消费方应用生成客户端密钥
  • 回到原有API服务端应用的注册页面,进入「公开API」菜单,定义对应的应用权限(应用角色)
  • 进入新注册的消费方应用的「API权限」菜单,添加刚才在API服务端应用下定义的自定义权限,完成管理员授权
  • 消费方发起令牌请求时,scope参数填写自定义API权限的完整标识符,不要使用User.ReadAll这类属于Microsoft Graph的无关权限

配置差异提示:该逻辑与Keycloak存在明显区别,Keycloak仅需完成API侧配置即可,无需单独为调用方创建独立客户端实体,从Keycloak迁移到Azure AD鉴权时极易踩中该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:21:16