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

.NET Core 7 JWT授权报错‘签名密钥未找到’求助

JWT授权报错:The signature key was not found 的解决办法

问题场景

开发大学作业WebAPI时,使用JWT Token实现授权功能,调用带[Authorize]特性的接口时,返回错误:

Bearer error="invalid_token", error_description="The signature key was not found"

错误原因及修复步骤

1. JWT认证配置未指定签名验证参数

当前Program.cs中仅调用了AddJwtBearer()但未配置验证密钥和算法,导致系统无法验证Token的签名有效性。

修改Program.cs中的JWT认证配置:
替换原来的JWT认证代码:

//JWT Authentication
builder.Services.AddAuthentication("Bearer").AddJwtBearer();

为以下代码:

//JWT Authentication
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration.GetSection("AppSettings:Token").Value!)),
            ValidateIssuer = false, // 若未配置Issuer可设为false,生产环境建议配置
            ValidateAudience = false // 若未配置Audience可设为false,生产环境建议配置
        };
    });

2. 未启用认证和授权中间件

当前代码中app.UseAuthentication();被注释,且缺少app.UseAuthorization();,导致认证逻辑未生效。

修改Program.cs的中间件顺序:
在app.UseHttpsRedirection();之后添加:

app.UseAuthentication();
app.UseAuthorization();

确保中间件顺序为:UseHttpsRedirection → UseAuthentication → UseAuthorization → MapControllers

3. Login方法逻辑顺序错误

当前Login方法先验证密码再判断用户是否存在,若用户不存在会触发空引用异常。

修改UsuariosController.cs中的LoginUsuario方法:
调整判断顺序,先检查用户是否存在,再验证密码:

[HttpPost("login", Name = "LoginUsuario")]
public async Task<ActionResult<Usuario>> LoginUsuario(Usuario Usuario)
{
    var usuarioEncontrado = await _context.Usuarios.FirstOrDefaultAsync(
        u => u.Correo == Usuario.Correo
    );

    if (usuarioEncontrado == null)
    {
        return NotFound("用户不存在");
    }

    if (!BCrypt.Net.BCrypt.Verify(Usuario.Contrasena, usuarioEncontrado.Contrasena))
    {
        return BadRequest("Contraseña incorrecta");
    }

    string token = GenerarToken(usuarioEncontrado);
    return Ok(token);
}

额外提示

  • 确保appsettings.json中的AppSettings:Token密钥和生成Token时使用的密钥完全一致
  • 生产环境建议配置Issuer和Audience,提高Token安全性

内容的提问来源于stack exchange,提问作者Emanuel Rojas Agüero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:42