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

.NET 7 Minimal API中JWT生成及验证失败问题求助

.NET 7 Minimal API JWT验证失败(401/Invalid Signature)排查方案

核心问题定位

你遇到的The signature key was not found和jwt.io显示的Invalid Signature,本质是JWT认证配置与令牌生成逻辑不匹配,以下是具体排查点和解决方法:


1. 认证配置未绑定签名密钥

你当前的AddJwtBearer()调用未传入任何配置参数,导致认证服务无法知晓验证签名所需的密钥,这是最常见的原因。

修复步骤:

  • 确保appsettings.json的JWT配置完整:
    "Jwt": {
      "SecretKey": "your-32-byte-minimum-secret-key-here",
      "Issuer": "your-app-issuer",
      "Audience": "your-app-audience"
    }
    
  • 修改认证配置,绑定令牌验证参数:
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                // 与appsettings及令牌生成逻辑保持一致
                ValidIssuer = builder.Configuration["Jwt:Issuer"],
                ValidAudience = builder.Configuration["Jwt:Audience"],
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:SecretKey"]))
            };
        });
    

2. 令牌生成逻辑与认证配置参数不一致

如果生成JWT时使用的密钥、签发方(Issuer)、受众(Audience)与认证配置不匹配,会导致签名验证失败,且Payload中缺失关键信息。

正确的令牌生成示例:

app.MapPost("/token", (IConfiguration config) =>
{
    var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config["Jwt:SecretKey"]));
    var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);

    var token = new JwtSecurityToken(
        issuer: config["Jwt:Issuer"],
        audience: config["Jwt:Audience"],
        expires: DateTime.UtcNow.AddHours(1),
        signingCredentials: signingCredentials
    );

    return Results.Ok(new { Token = new JwtSecurityTokenHandler().WriteToken(token) });
});
  • 必须确保SecretKey、Issuer、Audience与认证配置完全一致
  • 算法需匹配(示例用HmacSha256,认证端默认也使用该算法)

3. 中间件顺序错误

Minimal API对中间件顺序敏感,认证和授权中间件必须在端点映射前注册:

// 先注册认证、授权中间件
app.UseAuthentication();
app.UseAuthorization();

// 再映射受保护端点
app.MapGet("/secret", () => "敏感内容")
    .RequireAuthorization();

如果中间件顺序颠倒,授权逻辑无法生效,会直接返回401。


4. 密钥长度不符合算法要求

若使用HmacSha256算法,密钥长度至少为32字节(256位),过短的密钥会导致签名无效。可以通过代码检查:

var keyBytes = Encoding.UTF8.GetBytes(builder.Configuration["Jwt:SecretKey"]);
if (keyBytes.Length < 32)
{
    // 更换为至少32字节的密钥,比如生成一个随机的256位密钥
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:35:49