使用OpenAPI和Scalar为ASP.NET Core Web API加认证遇无效令牌错误
JWT认证"signature key was not found"问题排查方案
令牌签名密钥不匹配
ASP.NET Core的JWT认证中间件要求配置的签名密钥必须和签发令牌时使用的密钥完全一致。检查AddJwtBearer配置,确保签名密钥配置正确:builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, // 此处密钥需与签发令牌时的密钥完全相同,建议从配置文件读取 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:SecretKey"])), ValidateIssuer = true, ValidateAudience = true, ValidIssuer = builder.Configuration["Jwt:Issuer"], ValidAudience = builder.Configuration["Jwt:Audience"] }; });若使用RSA非对称加密,需确保配置的公钥与签发令牌的私钥配对。
BearerSecuritySchemeTransformer配置异常
检查你的BearerSecuritySchemeTransformer实现,确保它仅负责映射OpenAPI安全方案,未篡改签名密钥相关逻辑:public class BearerSecuritySchemeTransformer : ISecuritySchemeTransformer { public Task<OpenApiSecurityScheme> TransformAsync(OpenApiSecurityScheme scheme, CancellationToken cancellationToken) { scheme.Type = SecuritySchemeType.Http; scheme.Scheme = "bearer"; scheme.BearerFormat = "JWT"; return Task.FromResult(scheme); } }避免在Transformer中修改认证中间件的密钥配置。
令牌有效性验证
确认使用的Bearer令牌本身无问题:- 用本地代码解析令牌,检查签名算法是否与配置一致(如HS256对应对称密钥,RS256对应非对称密钥)。
- 验证令牌未过期,且签发者(Issuer)、受众(Audience)与配置中的
ValidIssuer、ValidAudience完全匹配。
配置加载异常
检查appsettings.json中的JWT配置项是否正确,且程序能正常读取:"Jwt": { "SecretKey": "至少16位长度的强密钥", "Issuer": "你的签发者标识", "Audience": "你的受众标识" }可在启动时打印配置值,确认未读取到空值或错误值。
中间件顺序错误
确保Program.cs中中间件注册顺序正确:app.UseAuthentication(); // 先注册认证中间件 app.UseAuthorization(); // 再注册授权中间件顺序颠倒会导致授权逻辑无法获取正确的认证信息。
内容的提问来源于stack exchange,提问作者user3742300
相关产品推荐
相关产品推荐

