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

Azure AD连接问题:MVC C#/Angular14调用.NET Core7/8 API报401/403

排查Azure AD令牌验证401/403问题的步骤

一、验证Bearer令牌的有效性

  • 用https://jwt.ms解析令牌,重点检查以下字段:
    • aud(受众):必须与API的应用ID URI完全匹配,不能是客户端ID
    • iss(颁发者):格式应为https://login.microsoftonline.com/{租户ID}/v2.0,确保租户ID与API配置一致
    • exp(过期时间):确认令牌未过期
    • scp/roles:委托权限检查scp字段是否包含API暴露的权限(如api://{API客户端ID}/access_as_user);应用权限检查roles字段是否有对应权限
    • appid:确认是客户端的ID,确保令牌来自正确的客户端

二、检查API的Azure AD配置

  • API暴露范围:确认已添加有效范围(如access_as_user)并启用,客户端权限中已勾选该范围且完成对应同意(管理员/用户同意,依权限类型而定)
  • API应用注册:确保应用ID URI设置正确,与令牌aud字段完全一致
  • 证书与密钥:若API用证书验证,确认证书未过期、私钥有效,且已配置在API应用注册的「证书和密码」中

三、检查.NET Core API代码配置

.NET Core 7/8认证配置示例:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
  • appsettings.json的AzureAd节点需包含:
"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "TenantId": "{你的租户ID}",
  "ClientId": "{API的客户端ID}",
  "Audience": "{API的应用ID URI}" // 必须与令牌aud一致
}
  • 确保中间件顺序正确:先调用app.UseAuthentication(),再调用app.UseAuthorization()
  • 检查控制器/方法的[Authorize]属性,若指定了角色或策略(如[Authorize(Roles = "Admin")]),需确认令牌包含对应roles字段

四、检查客户端权限配置

  • 客户端应用注册的「API权限」中,已添加API的目标权限且状态为已授予
  • 客户端获取令牌时,请求的scope参数需正确,格式为API应用ID URI + 权限范围(如api://{API客户端ID}/access_as_user),不能使用错误的范围值

五、Postman测试验证

  • 确认请求头Authorization格式正确:Bearer {令牌内容}(注意Bearer后有空格)
  • 检查请求的API端点路径是否与API路由匹配
  • 对比Postman获取的令牌与客户端令牌,排查是否存在字段差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:42:36