JwtSecurityToken 有最短过期时间吗?

Posted

技术标签:

【中文标题】JwtSecurityToken 有最短过期时间吗?【英文标题】:Is there a minimum expiration time for JwtSecurityToken? 【发布时间】:2018-05-25 01:44:03 【问题描述】:

在令牌的验证中,我检查了令牌的生命周期,它是 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;

【问题讨论】:

您是说问题中的第二个 13:07 是 13:12? @JonSkeet 抱歉。 没问题 - 只是不想让其他人感到困惑 :) 不完全是重复的,但我相当肯定,这将解决问题 - ***.com/a/29456969/6804888 【参考方案1】:

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

在 .NET Core / 5+ 中,您可以在 Startup 的 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 
            ;
        );

【讨论】:

以上是关于JwtSecurityToken 有最短过期时间吗?的主要内容,如果未能解决你的问题,请参考以下文章

JwtSecurityToken 过期时间无效 .NET Core 3.1

成功没有捷径,但有最短路径

如何在 Swift 4 中的浮点数后打印 5 位数字,有没有最短的方法? [复制]

如何在 Swift 4 中的浮点数后打印 5 位数字,有没有最短的方法? [复制]

System.IdentityModel.Tokens.JwtSecurityToken 自定义属性

JwtSecurityToken 理解与异常