Shiro+JWT+Redis做认证,关于token有效期内续期方案

最近做的项目Springboot+vue前后端分离

还是选用了扩展功能很强大的shiro作为安全框架

并且弃用了shiro的session管理,使用**JWT(JSON Web Token)**取而代之

现在已经实现登录认证

有个问题是,用户在token有效时间内的正常操作(请求header中携带token的请求)如何刷新token最好?

在网上查了查,我总结出两个方案:

1.第一种方案,单token反复刷新

简单来说就是用户每次访问后台服务,验证老token通过时,会进行jwt续期(重新颁发token),签发newtoken放到Response的header返回给前端

前端axios全局拦截Response获取header中的newtoken储存在localstorage,下次请求再带上这个newtoken

这样每次请求都会保持token时间重置,同时token也重置

但是这样做好像会在并发请求时引起反复刷新token导致多个请求失败的异常。

而且我不知道这样做是不是太过冗余,每次都要生成新token,如果用户在一段时间内反复点击一个按钮访问后端服务,会不会太影响性能了?

2.第二种方案,分为access_token和refresh_token

这种方案给我的理解就是大小token,大token(refresh_token)比小token(access_token)过期时间要长。

小token在有效期内,则正常处理,小token失效,则使用大token验证,通过则重新颁发token作为小token给前端,否则需要重新登录。

前端依旧拦截Responseheader存储新的小token

这样做减少了方案一冗余的刷新令牌操作,但是感觉这样做,是不是有点无用功了?就好像给单token延长了时间一样。。。

百思不得其解,希望大神能给讲一讲

你可能感兴趣的:(java,java,后端)