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

ASP.NET Core MVC升级MSAL后API端点JWT认证失败排查

问题排查方向

1. 认证方案未针对API单独配置

你的Razor Pages依赖Cookie认证正常生效,但API需要识别JWT Bearer令牌。升级MSAL后,大概率没给API端点指定Bearer认证方案,导致中间件只识别Cookie,不认请求携带的JWT。

  • 检查Startup.cs,确认同时注册了Cookie和Bearer两种认证方案,然后在API的控制器/Action上添加[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)],明确要求使用Bearer认证。

2. JWT的受众(Audience)不匹配

MSAL签发的JWT中aud字段必须和你API配置的受众完全一致,否则认证直接失败。

  • 核对appsettings.json里JWTBearer配置的Audience,和客户端请求令牌时指定的API范围(比如api://{API-客户端ID}/access_as_user)是否完全对应。

3. 令牌验证参数配置不全

MSAL的JWT需要验证颁发者、签名密钥等核心信息,少了任何一项都会导致验证不通过。

  • 检查Startup.cs中JWTBearer的Authority是否正确(格式一般为https://login.microsoftonline.com/{租户ID}/v2.0),同时确认ValidateIssuer、ValidateAudience这些验证选项已正确开启并配置对应值。

4. 中间件顺序错误

认证和授权中间件的顺序不能混乱,必须先注册认证中间件,再注册授权中间件,且Bearer认证中间件需正确加入请求管道。

  • 确保Startup.cs里先调用services.AddAuthentication()完成两种认证方案的配置,然后在Configure方法中先执行app.UseAuthentication(),再执行app.UseAuthorization(),顺序不可颠倒。

5. 客户端传递的是ID Token而非访问令牌

MSAL中ID Token仅用于前端身份验证,API需要的是访问令牌(Access Token)。如果客户端传递的是ID Token,API会直接拒绝识别。

  • 检查客户端代码,确认使用AcquireTokenForClient(客户端凭证流)或AcquireTokenInteractive+指定API范围的方式获取访问令牌,而非用ID Token调用API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:03:25