我正在使用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
的传入令牌?
根据注释,中间件默认不允许"alg": "none"
。这似乎是由于问题中提到的漏洞。
关于拒绝:我尝试用"alg": "none"
传递令牌,并在响应中得到invalid_token
(Microsoft.AspNetCore.Authentication.JwtBearer 2.1.0
(。
顺便说一句,规范要求实现HS256
和"none"
算法。