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

调用基于AAD认证的外部Web API返回401(invalid_grant)问题排查

问题分析与解答

1. WindowsAzureActiveDirectoryBearerAuthenticationOptions 对 grant_type 的处理

WindowsAzureActiveDirectoryBearerAuthenticationOptions 本身没有专门用于控制grant_type验证的配置项。它的核心职责是验证Azure AD颁发的JWT Bearer令牌的合法性,校验维度包括:

  • 令牌签名有效性
  • 受众(aud)是否匹配API的配置
  • 令牌是否过期
  • 颁发者(iss)是否可信
  • 权限声明(scp/roles)是否符合要求

grant_type是你向AAD获取令牌时使用的请求参数,该参数不会被包含在最终生成的JWT令牌中,因此该认证中间件不会直接校验grant_type。

2. "invalid_grant"错误的可能原因

你遇到的"Invalid authorization bearer is passed (invalid_grant)"错误,大概率是API端的自定义错误提示(而非中间件原生抛出)。中间件本身不会针对grant_type返回这类错误,常见触发场景包括:

  • 令牌中的azp(客户端ID)未被API授权访问
  • 令牌缺少API所需的权限声明(scp或roles)
  • 令牌的受众(aud)与API配置的TokenValidationParameters.ValidAudience不匹配
  • 令牌已过期或签名无效

3. API默认允许的令牌类型

如果API仅使用WindowsAzureActiveDirectoryBearerAuthenticationOptions的默认配置,它不会限制获取令牌的grant_type,只要令牌是AAD合法颁发、且符合令牌校验规则的都能通过验证。也就是说:

  • client_credentials模式生成的令牌
  • authorization_code模式生成的令牌
  • password模式生成的令牌(不推荐)
    只要满足令牌校验要求,默认都能被接受。

排查建议

既然你有API源代码,建议从以下方向排查:

  • 搜索API中所有返回"invalid_grant"错误的代码位置,确认触发逻辑
  • 检查TokenValidationParameters的配置,确保ValidAudience、ValidIssuer等参数正确
  • 解码你的访问令牌(可使用JWT解析工具),确认aud、iss、roles/scp、azp等声明是否符合API要求
  • 确认API的应用注册中是否正确配置了服务主体的权限授予

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:35:17