JwtSecurityToken 有最短过期时间吗?

per*_*zzo 3 c# token xamarin.android jwt

在令牌验证中,我检查了令牌的生命周期,它是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
);
Run Code Online (Sandbox Code Playgroud)

验证令牌:

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;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

这是由于ClockSkew令牌验证参数,它允许提供一个缓冲区来解决发布 JWT 的服务器和验证 JWT 的服务器之间的时钟差异。

在 .NET Core / 5+ 中,您可以TokenValidationParameters在 Startup 中的 JwtBearer 配置中的对象中更改其值,如下所示。其默认值为 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 
            };
        });
Run Code Online (Sandbox Code Playgroud)