JJWT代币。如何设置超时?

时间:2016-10-06 17:09:23

标签: java jwt jjwt

使用jjwt库,

 String compactJws = Jwts.builder().setSubject("Joe").signWith(SignatureAlgorithm.HS512, key).compact();

但是这个令牌是永久性的,我该怎么设置某种超时?

1 个答案:

答案 0 :(得分:6)

Date expiration = getExpirationDate(); // implement me

Jwts.builder().setSubject("Joe")
    .setExpiration(expiration)
    .signWith(SignatureAlgorithm.HS512, key)
    .compact();

根据JWT规范,日期将从纪元转换为(不是毫秒)的数量,并存储为exp JWT声明。解析器将查看该声明并确保JWT未过期。

请注意,到期检查基于解析时的系统时钟时间。如果生成令牌的计算机的时钟与解析令牌的计算机相比已合理地漂移,则过期检查可能会失败。在这种情况下,您可以使用JJWT的setAllowedClockSkewSeconds方法(在JwtParser / Builder上)允许在时钟之间的差异(1到2分钟应该绰绰有余)上有一些摆动空间,例如:

Jwts.parser().setAllowedClockSkewSeconds(120)...etc...

如果出于任何可能不够好的原因,您可以通过以下方式控制实际的解析时钟:

Jwts.parser().setClock(new MyClock())...etc...

但在大多数情况下,设置Clock并不是必需的(在测试用例中通常最有用)。