JWT令牌到期时间在生成的令牌中被修剪

时间:2015-01-07 11:25:12

标签: java date token jwt

我在我的一个应用程序中生成JWT令牌以与某些第三方API通信,我可以正确创建令牌,直到我开始面对一个奇怪的问题,下面是我如何设置令牌的过期日期:< / p>

JWTClaimsSet jwtClaims = new JWTClaimsSet();
jwtClaims.setExpirationTime(new Date(new Date().getTime() + 1000*60*120));
jwtClaims.setCustomClaim("myobj", prepare(myobj));
JWSHeader header = new JWSHeader(JWSAlgorithm.RS256);
header.setContentType("text/plain");

就在这之下,我做了一个

System.out.println("after :::"+jwtClaims.getExpirationTime().getTime());

将值打印为:1420636467027 但是,当我解码我的令牌时,我得到的值为:1420636467所以基本上最后3位数字正在被修剪,而且第三方API因为过期令牌而正在调试失败,这是正确的。 为了避免这种情况,还有什么需要做的吗? 在这方面的任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:3)

JWT令牌中的所有时间都是在时间(iat)发出的,而不是在时间(nbf)和到期时间(exp)之前,应该在1970年1月1日以秒为单位进行测量。由于您以毫秒为单位指定时间,因此当服务器破解您的JWT令牌时,可能会在服务器端引发问题。只需几秒钟即可开始使用时间。希望这能解决你的问题。

答案 1 :(得分:1)

以毫秒为单位增加时间时,请使用长值。这应该可以解决它:

.expirationTime(new Date(new Date().getTime() + 720000L))