【发布时间】:2020-05-20 09:24:08
【问题描述】:
我已将令牌到期时间设置为 1 分钟,但 1 分钟后我没有收到 401 未授权错误。
Startup.cs
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
令牌生成方法:
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
int expiryMins = 1
var token = new JwtSecurityToken(_configuration["Jwt:Issuer"],
_configuration["Jwt:Issuer"],
null,
expires: DateTime.UtcNow.AddMinutes(expiryMins),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
【问题讨论】:
-
它是否使用令牌?如果令牌未在标头中发送,它会 401 吗?
-
默认情况下,身份验证处理程序允许一些时钟偏差来说明服务器上的时钟不同。 IIRC 是 5 分钟,可以在 TokenValidationParameters 中调整。
-
@possum 是的,它使用令牌,
-
表示这一行
ClockSkew = TimeSpan.FromMinutes(0),。 -
ClockSkew 表示如果设置为 5 分钟,则令牌将在过期后 5 分钟工作。保持这种状态通常是个好主意,因为服务器时间可能不同。
标签: c# asp.net-core jwt asp.net-core-3.1 jwt-auth