我使用jjwt使用github https://github.com/jwtk/jjwt#specification-compliant
上的文档创建令牌我知道我必须创建一个刷新令牌,将其存储在我的数据库中,并使用它为用户创建一个访问令牌。但我找不到一个简单的例子来帮助我理解如何编码它。我能够在github文档之后创建一个令牌,但我不知道如何使用我的刷新令牌创建刷新令牌然后知道访问令牌。
我在android studio上使用java,并使用App Engine Java servlet模块备份api
答案 0 :(得分:0)
创建刷新令牌只是创建一个“普通”令牌,其中包含新的(刷新的)数据(声明)。
只有当您声称服务器随时间发生变化时才有意义,例如:到期时间。显然,只有令牌发行者(我假设您的情况下服务器)可以刷新令牌,客户端需要轮询它们,或者服务器需要通知客户端。
在服务器上,只需创建一个新的令牌,其未来的到期时间填写为:
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1);
cal.getTime();
String compactJws = Jwts.builder()
.setSubject("Joe")
.setExpiration(cal.getTime();) // set expiration to e.g. one hour in the future
.signWith(SignatureAlgorithm.HS512, key)
.compact();
提示:除了将JWT令牌置于中央黑名单之外,你不能使JWT令牌无效。这会扼杀JWT的概念。
答案 1 :(得分:0)
从那以后已经很久了:
您有2个令牌:一个快过期(令牌)和一个很长一段时间后过期(刷新令牌)。
之所以这样做,是因为实际上很少使用刷新令牌,而且您也不会如此频繁地通过网络发送它。如果您非常频繁地通过网络发送令牌,则必须使其快速过期(由您决定令牌在30分钟/ 1小时/ 2天的寿命长短)。
当存储数据的JWT令牌到期时,请使用refresh token
(应从客户端安全存储)并获取另一个令牌您经常通过网络发送的邮件。
流程应如下所示:
刷新令牌仅用于不让用户再次插入凭据