在令牌的验证中,我检查了令牌的生存期,它是13:07:10。当我运行验证时,它是13:12,验证是成功的。为什么?
当它大约是13:15时,我再次运行验证,它抛出了一个异常,就像预期的那样。
令牌是否有最小过期时间?
创建令牌:
var token = new JwtSecurityToken(
issuer: token_issuer,
audience: token_audience,
claims: claims,
expires: DateTime.Now.AddSeconds(5),
signingCredentials: creds
);验证令牌:
private static bool ValidateToken(string token)
{
try
{
TokenValidationParameters validationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(token_salt),
ValidAudience = token_audience,
ValidIssuer = token_issuer,
RequireExpirationTime = true
};
ClaimsPrincipal principal = new JwtSecurityTokenHandler().ValidateToken(token_last, validationParameters, out SecurityToken validatedToken);
return true;
}
catch(SecurityTokenExpiredException ex)
{
}
return false;
}发布于 2021-05-24 19:20:19
这是由于ClockSkew令牌验证参数,它允许一个缓冲区来解释发出JWT的服务器和验证它的服务器之间的时钟差异。
在.NET Core / 5+中,您可以在启动时JwtBearer配置中的TokenValidationParameters对象中更改其值,如下所示。它的默认值是300秒,即5分钟。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "https://some-jwt-token-issuer.com";
options.TokenValidationParameters = new TokenValidationParameters()
{
// Set the below to eliminate the skew
ClockSkew = TimeSpan.Zero
};
});https://stackoverflow.com/questions/47754556
复制相似问题