如何在TokenValidationParameters中指定JWT令牌中的算法应匹配HS256?

时间:2018-11-21 00:20:02

标签: security asp.net-core .net-core jwt

我正在使用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的传入令牌?

1 个答案:

答案 0 :(得分:0)

默认情况下,根据comment,中间件不允许"alg": "none"。似乎是由于question中提到的漏洞利用所致。

关于拒绝:我尝试通过"alg": "none"传递令牌,并在响应(invalid_token中得到Microsoft.AspNetCore.Authentication.JwtBearer 2.1.0

顺便说一下,HS256"none"算法的规范requires实现。