ASP.NET Core Web API集成Azure AD授权遇CORS及Token签名无效问题
解决Azure AD Token签名无效(401)问题的方案
关键排查与修复步骤
1. 核对API的Authority配置
- 确保
appsettings.json里的Authority是Azure AD的正确租户端点,格式应为https://login.microsoftonline.com/{租户ID}/v2.0(SPA应用默认返回v2.0 Token,API需对应使用v2.0端点),别漏了/v2.0后缀,租户ID用GUID格式,不要用租户域名替代。 - 可以直接访问
{Authority}/.well-known/openid-configuration确认端点返回正常,确保API能获取到Azure AD的签名密钥。
2. 验证Token受众(Audience)匹配
- 用JWT解析工具解析获取到的Token,查看
aud字段值:- 如果API是v1.0模式,
aud必须等于API应用注册的客户端ID; - 如果是v2.0模式,
aud必须等于API的应用ID URI(比如api://{API客户端ID})。
- 如果API是v1.0模式,
- 确保Swagger里配置的Scope包含正确的API前缀,比如
api://{API客户端ID}/access_as_user,不能用SPA自己的客户端ID作为Scope。
3. 检查API认证中间件配置
- 确认.NET Core API使用
AddMicrosoftIdentityWebApi时绑定了正确的配置节:services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd")); - 若手动配置JwtBearer,需保证
TokenValidationParameters里的参数和Token字段严格匹配:options.TokenValidationParameters = new TokenValidationParameters { ValidAudience = Configuration["AzureAd:Audience"], ValidIssuer = Configuration["AzureAd:Authority"], ValidateIssuerSigningKey = true };
4. 确认SPA应用的API权限配置
- 登录Azure门户,进入SPA应用注册的API权限页面:
- 确认已添加目标API的委托权限;
- 确保已点击授予管理员同意(委托权限必须完成这一步才能生效)。
5. 排查Token签名算法与版本
- 解析Token查看
alg字段,Azure AD默认用RS256,确保API的认证中间件没有强制使用其他算法(比如HS256),否则会导致签名验证失败。 - 确认API没有限制Token版本,SPA返回的v2.0 Token要对应API的v2.0配置,不要混用v1.0和v2.0端点。
6. 检查Azure应用服务的环境配置
- 部署到Azure应用服务后,进入应用服务的配置→应用设置,确认认证相关的配置项(比如
AzureAd:Authority、AzureAd:Audience)和本地appsettings.json一致,避免部署时被覆盖或配置错误。 - 确保应用服务可以正常访问Azure AD的元数据端点,若有VNet或防火墙限制,需允许出站访问
login.microsoftonline.com相关域名。
快速验证流程
- 解析Token,记录
aud、iss、alg字段值; - 对比API配置里的
Audience、Authority是否和Token字段完全匹配; - 确认API应用注册的应用ID URI与Token的
aud一致; - 检查SPA应用的API权限是否已添加并完成管理员同意。
内容的提问来源于stack exchange,提问作者Sayan
相关产品推荐
相关产品推荐

