.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
相关产品推荐
相关产品推荐

