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

ASP.NET Core使用JWT认证报invalid_token(audience为空)错误

JWT令牌校验失败修复方案

问题现象

使用生成的JWT令牌访问受保护API时,返回如下认证错误:

WWW-Authenticate: Bearer error="invalid_token", error_description="The audience 'empty' is invalid"

错误根因

报错核心原因是JWT校验规则与令牌生成逻辑不匹配:你在JWT认证配置中开启了受众校验(ValidateAudience = true),要求令牌必须携带合法的aud(受众)声明,但生成JWT令牌时未设置任何Audience值,校验阶段读取到的aud字段为空,直接判定令牌无效。

可选修复方式

你可以根据实际场景二选一:

方式1:关闭受众校验(适合本地开发测试场景)

直接修改ConfigureServices中的令牌校验参数,关闭受众校验,无需改动令牌生成代码:

var tokenValidationParameters = new TokenValidationParameters()
{
    IssuerSigningKey = signingKey,
    ValidateIssuer = false,
    ValidateAudience = false, // 原代码此处为true,修改为false
    ClockSkew = TimeSpan.Zero
};

方式2:保留受众校验(生产环境推荐)

如果需要开启受众校验,必须同时在服务配置和令牌生成代码中设置匹配的Audience值:

  1. 首先在JWT认证配置中指定合法的受众值:
var tokenValidationParameters = new TokenValidationParameters()
{
    IssuerSigningKey = signingKey,
    ValidateIssuer = false,
    ValidateAudience = true,
    ValidAudience = "BikeStoreAPI", // 可自定义为你的API服务标识,测试场景可直接填项目名
    ClockSkew = TimeSpan.Zero
};
  1. 修改登录接口中的JWT生成逻辑,传入和配置一致的Audience参数:
var jwt = new JwtSecurityToken(
    audience: "BikeStoreAPI", // 和上面配置的ValidAudience值完全一致
    claims: claims, 
    signingCredentials: signingCredentials, 
    expires: DateTime.Now.AddMinutes(30)
);

其他配置优化建议

  • 调整服务注册顺序:将AddIdentity相关代码放到AddAuthentication的JWT配置之后,避免Identity默认的Cookie认证方案覆盖JWT认证配置,引发其他认证异常。
  • 发起请求时确保请求头格式正确:Authorization头的值格式为Bearer {你获取到的JWT令牌字符串},注意Bearer和令牌之间保留一个半角空格。

测试截图参考

接口测试截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:15:52