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

ASP.NET Core 2.0如何忽略JWT Bearer令牌签名验证?

实现ASP.NET Core 2.0 JWT Bearer中间件忽略签名验证

既然你的API已经部署在API网关之后,且网关已经完成了Bearer令牌的验证工作,那我们只需要调整JWT Bearer中间件的配置,让它跳过签名验证,同时保留从令牌中提取声明的能力即可。下面是具体的实现步骤:

核心配置修改

在Startup.cs的ConfigureServices方法中,配置JwtBearer中间件时,重点修改TokenValidationParameters里的验证参数:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

public void ConfigureServices(IServiceCollection services)
{
    // 添加身份验证服务
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                // 关键:关闭签名验证,直接信任网关转发的令牌
                ValidateSignature = false,
                
                // 由于网关已经验证过令牌的发行方和受众,这里可以关闭对应验证
                ValidateIssuer = false,
                ValidateAudience = false,
                
                // 如果网关已经处理了令牌过期逻辑,也可以关闭生命周期验证
                // 若需要保留令牌中的过期声明但不验证有效性,同样设为false
                ValidateLifetime = false,
                
                // 即使不验证签名,也需要指定一个密钥(因为框架要求非空,实际不会被使用)
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("any-dummy-key-here"))
            };
        });

    // 添加授权服务,支持基于声明的授权
    services.AddAuthorization();
}

关键参数说明

  • ValidateSignature = false:这是实现忽略签名验证的核心,中间件不会再校验令牌的签名是否合法。
  • ValidateIssuer/ValidateAudience:因为网关已经完成了这部分验证,关闭后可以减少不必要的计算开销。
  • ValidateLifetime:如果网关已经拦截了过期令牌,关闭此项可以避免中间件再次校验过期时间;如果需要从令牌中读取exp声明但不验证,也保持为false即可。
  • IssuerSigningKey:框架要求这个参数不能为null,所以随便填一个字符串转成密钥就行,因为ValidateSignature为false,它不会被实际使用。

注意事项

这种配置仅适用于API网关已经完全验证了令牌合法性的场景,绝对不能在没有网关保护的公开环境中使用,否则会导致恶意伪造的令牌也能通过验证,带来严重的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:12:42