Advertisement

黑马头条项目 JWT—4.4 JWT禁用问题

阅读量:

需求

当token被颁发给用户后,在其有效期内该服务端也会予以认可;然而,在该token的有效期内如果需要让它失效,则该如何操作?

此问题的应用场景:

  • 账户更改为新身份令牌,并将无效的旧令牌释放;系统永久封禁该账户 *

解决方案

在redis中使用set类型保存新生成的token

复制代码
 key = 'user:{}:token'.format(user_id)

    
 pl = redis_client.pipeline()
    
 pl.sadd(key, new_token)
    
 pl.expire(key, token有效期)
    
 pl.execute()
    
    
    
    
    代码解释
类型
user:{user_id}:token set 新token

当客户端采用token发起请求时,在检测到存在该用户对应的user:{}:token记录时(若验证该token有效),Redis系统将对该记录进行读取和解析

  • 若无记录存在,则允许通过并进入视图进行业务处理。
    • 否则(若有记录),则需检查当前请求中的token值是否存在于Redis存储的集合中:
      • 若该token值存在于Redis集合中的对应位置上,则允许通过。
      • 否则(即该token值不在Redis集合中的对应位置上),则返回403错误状态并停止进一步业务处理。
复制代码
 key = 'user:{}:token'.format(user_id)

    
 valid_tokens = redis_client.smembers(key, token)
    
 if valid_tokens and token not in valid_tokens:
    
   return {'message': 'Invalid token'.}, 403
    
    
    
    
    代码解释

说明:

Redis记录设置的有效时长相当于一个Token的有效期,在Old Token过期后会触发Redis自动清除记录以释放空间

知识点:hs256和sh256区别:

全部评论 (0)

还没有任何评论哟~