IDX10500:签名验证失败。没有提供安全密钥来验证签名

pan*_*nis 2 .net c# jwt asp.net-core

我有以下代码,当我调用 api 端点时出现错误 Bearer was not authenticated. Failure message: IDX10500: Signature validation failed. No security keys were provided to validate the signature.

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(cfg =>
{
    cfg.RequireHttpsMetadata = false;
    cfg.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateAudience = false,
        ValidateIssuer = false,
        ValidateIssuerSigningKey = false
    };
});
Run Code Online (Sandbox Code Playgroud)

如果我设置了,为什么会发生这种情况ValidateIssuerSigningKey=false

Nan*_* Yu 10

请参考线程:https : //github.com/aspnet/Security/issues/1741

您可以将委托 TokenValidationParameters.SignatureValidator 设置为仅返回 JwtSecurityToken。

目前,您不能仅设置ValidateIssuerSigningKey为 false 以跳过签名验证。作为一种解决方法,您可以将委托 TokenValidationParameters.SignatureValidator 设置为仅返回 JwtSecurityToken :

ValidateIssuerSigningKey = false,
SignatureValidator = delegate (string token, TokenValidationParameters parameters)
{
    var jwt = new JwtSecurityToken(token);

    return jwt;
},
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 .NET 5/6/7/8 及更高版本,则需要使用 Microsoft.IdentityModel.JsonWebTokens.JsonWebToken 而不是 JwtSecurityToken。所以该行应该像 ----> var jwt = new Microsoft.IdentityModel.JsonWebTokens.JsonWebToken(token); (3认同)