jwt token长度限制_OAUTH.令牌存储介绍以及JWT实现强制登出、登录个数控制

1、令牌存储介绍

TokenStore的实现类,有InMemoryTokenStore、JdbcTokenStore、JwkTokenStore、RedisTokenStore。

1.1 基于内存的 InMemoryTokenStore

  • 优点:单机、简单易用
  • 缺点:a) 重启服务器导致令牌全部丢失,用户需要重新授权。 b) 微服务、分布式系统中无法共享令牌信息。

1.2 基于数据库的 JdbcTokenStore

  • 优点:简单
  • 缺点:数据库有限制性,一旦数据量过大,那么CRUD等操作执行速率就会下降

1.3 基于 Redis 的 RedisTokenStore

token认证信息存储在redis中,token为随机redis key。

  • 优点: 使用缓存存储用户的认证信息,可以撤销用户,强制登录下线
  • 缺点:-

1.4 基于 JWT 的 JwtTokenStore

token认证信息存储在jwt负载中。

  • 优点:无需保存用户认证信息
  • 缺点:无法撤销用户的授权,只能等token过期

2、JWT实现token失效以及登录token个数控制

2.1 oauth认证生成token流程

客户端调用/oauth/token接口,进入TokenPoint中的方法流程,最后调用TokenGranter。

3ef17fd9c907d0d8bdff2c47da942526.png

TokenGranter根据grant_type的不同,调用不同的认证方式,获取用户信息,最后调用TokenService生成令牌。

a52d4629d7ec2768e91b0ad9389502e9.png

生成令牌后,会调用storeAccessToken接口存储token信息,对于JwtTokenStore实现类来说,该接口没有做任何事情,因此我们可以考虑重写该方法逻辑,将token信息存入缓存中。

2.1 登录提出、个数控制思路如下:

  1. 生成Jwt的时候,将Jwt Token存入redis中,采用list数据结构(为了控制登录个数及顺序,key过期时间取item中最大值
  2. 扩展Jwt的验证功能,验证redis中是否存在数据,如果存在则token有效,否则无效,并判断登录个数,若超出登录个数则按顺序移除相应的token
  3. 重写removeAccessToken接口,在该方法内删除redis对应的key 流程图如下:
e98518a2d3652f7b847bd4ead6673ac9.png

网关校

9d0ef88f2bfb35fbfe1c5651a0cf73c2.png

验流程图:

注:为了平滑上线,校验策略先置为false,即不校验token,并将token存入redis中,等上线一段时间,线上大多数用户的token都记录在缓存中后,再开启token有效期校验。
作者:是趴趴熊呀
链接:https://juejin.im/post/6881552786903793677
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值