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

.NET 6使用Azure AD客户端凭据时遇invalid_token问题

排查建议

以下是针对该问题的具体排查步骤:

  • 检查客户端应用的API权限配置
    客户端凭据模式依赖应用权限(而非授权码模式的委托权限)。需确认:

    1. 在客户端应用注册的「API权限」板块,添加了API应用的应用权限(注意区分“应用权限”和“委托权限”类别);
    2. 已完成管理员同意(应用权限必须由租户管理员手动同意才能生效,这是最容易遗漏的关键步骤)。
  • 解析令牌并核对核心声明
    用jwt.ms解析客户端凭据获取的令牌,重点检查:

    • aud:是否与API应用注册的「应用ID URI」完全一致;
    • azp:是否为客户端应用的ID;
    • roles:是否包含API应用定义的应用权限(使用/.default范围时,令牌应包含该声明,若缺失则说明权限未正确配置);
    • iss:是否与API配置中的租户颁发者匹配(比如https://login.microsoftonline.com/{tenantId}/v2.0或v1版本)。
  • 检查API的验证代码配置
    在Program.cs中确认AddMicrosoftIdentityWebApi的配置是否正确:

    1. 确保appsettings.json里的AzureAd:Audience与令牌的aud声明完全一致;
    2. 检查是否自定义了TokenValidationParameters,比如是否误设了ValidateActor、ValidIssuers等参数,导致应用身份令牌被拦截;
    3. 排查控制器的授权属性:若使用了[Authorize(Roles = "xxx")]或自定义策略,需确认这些要求是否适用于应用身份(客户端凭据模式无用户角色声明,若策略强制要求用户身份则会导致拒绝)。
  • 提升Kestrel日志级别获取详细信息
    将日志级别调整为Debug,查看完整的令牌验证流程:

    // appsettings.json
    "Logging": {
      "LogLevel": {
        "Microsoft.AspNetCore.Authentication": "Debug",
        "Microsoft.Identity.Web": "Debug"
      }
    }
    

    重点关注验证过程中是否有被忽略的错误细节,比如某个声明验证失败、授权策略不匹配等。

  • 确认客户端令牌请求端点与版本
    客户端请求令牌的端点需与API支持的令牌版本匹配:

    • 若API应用注册使用v2端点,客户端应调用https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token;
    • 若使用v1端点,调用https://login.microsoftonline.com/{tenantId}/oauth2/token;
      同时确认请求范围{api-app-id-uri}/.default的拼写完全正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:20