JJWT令牌。如何设置超时时间?

7
使用 jjwt 库,
 String compactJws = Jwts.builder().setSubject("Joe").signWith(SignatureAlgorithm.HS512, key).compact();

但是这个令牌是永久的,我该如何设置某种超时时间呢?
1个回答

8
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 并不是必要的(通常只在测试用例中最有用)。


1
谢谢,真的让事情变清晰了。你为我节省了几个小时在今天早上搜索这个问题! - robm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接