使用java

时间:2017-10-03 06:28:37

标签: java android oauth-2.0 jwt

我使用jjwt使用github https://github.com/jwtk/jjwt#specification-compliant

上的文档创建令牌

我知道我必须创建一个刷新令牌,将其存储在我的数据库中,并使用它为用户创建一个访问令牌。但我找不到一个简单的例子来帮助我理解如何编码它。我能够在github文档之后创建一个令牌,但我不知道如何使用我的刷新令牌创建刷新令牌然后知道访问令牌。

我在android studio上使用java,并使用App Engine Java servlet模块备份api

2 个答案:

答案 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 (应从客户端安全存储)并获取另一个令牌您经常通过网络发送的邮件。

流程应如下所示:

  1. 使用凭据登录=>获取令牌(有效期2小时)和刷新令牌(有效期30年);
  2. 客户端安全地存储两个令牌
  3. 令牌已过期
  4. 使用刷新令牌发出请求并获得另一个令牌,该令牌在2小时内到期
  5. 刷新令牌在30年后过期-注销用户

刷新令牌仅用于不让用户再次插入凭据