7

使用 jjwt 库,

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

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

4

1 回答 1

8
Date expiration = getExpirationDate(); // implement me

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

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

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

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

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

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

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

于 2016-10-06T22:38:19.823 回答