如何删除令牌JWT

时间:2018-09-03 15:58:12

标签: java spring spring-boot spring-security jwt

我正在使用JWT(承载令牌)在spring框架上进行身份验证。

public String generateToken(UserProfile authentication) {

  // set the expiration time        
  Date now = new Date();
  Date expiryDate = new Date(now.getTime() + jwtExpirationInMs);

  // Generate token and return      
  return Jwts.builder()
    .setSubject(authentication.getUsername())
    .claim("roles","user")
    .setIssuedAt(new Date())
    .setExpiration(expiryDate)
    .signWith(SignatureAlgorithm.HS512,jwtSecret)
    .compact();

上面的类生成一个令牌并响应用户。我的问题是,当用户在第一个令牌到期之前发出新令牌时,我将如何删除该令牌;用户在第一个令牌过期之前请求新令牌时,要撤消第一个令牌?

2 个答案:

答案 0 :(得分:1)

如果您使用JWT,则无法撤销令牌。其有效性是嵌入式的。

要撤消令牌时,请勿使用JWT。您必须保留令牌并在每次请求时检查其有效性。

如果您真的想使用它,请将其保存为独立的db,然后添加一个标志或时间戳以确认有效性。

查看JWT文档:https://jwt.io/

答案 1 :(得分:0)

我认为JWT无法做到这一点。 你可以

  • 将旧文件添加到一些快速存储中(例如Redis或memcached)
  • 为该值设置一些超时时间(比不再需要的令牌的到期时间长一点)
  • 检查来自请求的令牌是否在您的缓存中,如果是,则拒绝它

基本上,将其列入黑名单

我不知道其他解决方案