我可以在TokenValidationParameters中哪里指定JWT令牌中的算法应匹配HS256?

问题描述 投票:0回答:2

我正在使用 AspNet Core 构建 Web api 和 JWT 令牌来对用户进行身份验证。

我可以在

TokenValidationParameters
中在哪里指定令牌中的
alg
应与 HS256 匹配(并且永远不匹配
none
)?

    services
        .AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(cfg =>
        {
            cfg.RequireHttpsMetadata = false;
            cfg.SaveToken = true;
            string jwtIssuer = configuration["JwtIssuer"];
            SymmetricSecurityKey securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["JwtKey"]));
            cfg.TokenValidationParameters = new TokenValidationParameters
            {
                ValidIssuer = jwtIssuer,
                ValidAudience = jwtIssuer,
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = securityKey,
                ClockSkew = TimeSpan.Zero
            };
        });

默认情况下,库是否拒绝将

alg
设置为
none
的传入令牌?

security asp.net-core .net-core jwt
2个回答
1
投票

根据注释默认中间件不允许

"alg": "none"
。似乎这是由于问题中提到的漏洞造成的。

关于拒绝:我尝试使用

"alg": "none"
传递令牌,并在响应中得到
invalid_token
(
Microsoft.AspNetCore.Authentication.JwtBearer 2.1.0
)。

顺便说一句,规范需要实现

HS256
"none"
算法。


0
投票

我错误地设置了:

TokenValidationParameters = new TokenValidationParameters
{
    ValidateIssuer = false,
    ValidateAudience = false,
    ValidateLifetime = false,
    ValidateIssuerSigningKey = true,
    ValidIssuer = jwtSettings.Issuer,
    ValidAudiences = jwtSettings.Audiences,
    IssuerSigningKey = SymmetricSecurityKey,
    ValidAlgorithms = new string[] { SecurityAlgorithms.HmacSha256Signature },
    NameClaimType = ClaimTypes.Name
};

删除 ValidAlgorithms 配置选项后,问题就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.