我在我的一个应用程序中生成了一个JWT令牌,以便与某些第三方API通信,我可以正确地创建令牌,直到我开始面临以下一个奇怪的问题:我如何设置令牌的到期日期:
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未能使我的调用失败,这是正确的。
为了避免这种情况,我还有什么需要做的吗?
非常感谢在这方面的任何帮助。
最佳答案
JWT令牌中的所有时间(如在time(iat)发行,而不是在time(nbf)之前和到期时间(exp)之前)都应该以自1970年1月1日以来的秒数进行度量。由于您以毫秒为单位指定时间,因此当服务器破解打开您的JWT令牌时,这可能会导致服务器端出现问题。只需几秒钟即可开始使用时间。希望那能解决您的问题。