微服务jwt登录过期解决方案

好长时间没有上来写博客了,想你们了都有点 ,😊,近期一直在忙这搭建微服务架构,为一个app提供稳定服务而忙碌,从而在搭建的过程中,遇到了jwt过期以及,恶意刷新jwt的问题,今天主要是针对这两个问题展开教程,传统方式和我的方案到底哪个才是无痛刷新.话不多说,直接上图
以下图是jwt认证流程图

在这里插入图片描述

(这行图是老弟本人直接网上下载的哈)

以上是jwt认证的基本流程,对于了解jwt的同学来说,jwt有个弊端,jwt不允许续签时间,时间到期,token就过期,这就导致网上有好多垃x博主,token过期直接跳转登录页,不管是不是在使用系统操作中,这给用户会带来极致不好的体验,还有一种就是直接jwt永不过期,实在是看不懂这些大神的操作,token不过期,那就意味着随意获得一个token就能随意访问,只能用太恶心了描述,由于我最近搭建的是服务于一个app的微服务架构,那么就不能使用这两种种解决方案

以下图是网上找的jwt无痛刷新方案:

在这里插入图片描述
此解决方案是网上找的 ,恶心至极,这样的方案没考虑并发后造成jwt浪费,间接导致系统不安全.

而我 ,现在要告诉大家一个正确的解决方案:

首先我个人认为:token过期时间越短越好,但对于app来说,一个月token过期 1小时缓冲过期 半年刷新足以

以下图正确的jwt无痛刷新流程图(可能有点不太清楚,图下文字描述)

在这里插入图片描述

字体有点小,我粘贴到这里

首先说一下token制作以及token过期时间

1.需要制作两个token : 首先得到缓冲token过期时间 再得到真实token过期时间 以及 刷新token 和刷新token过期时间

缓冲token过期=真实token过期时间-1小时 真实token 过期时间为3小时 刷新token过期10小时
给前台只需要返回token和刷新token以外,额外增缓冲过期时间

2.以上面的公式 :可知 缓冲token过期为2小时 真实token过期3小时 刷新token过期10小时

请求流程

1.前台携带缓冲token请求资源返回成功返回0 失败-1 缓冲token过期成功300300 缓冲token过期失败300301 真实token过期 返回309309

拦截流程

	1.判断 token是否拉黑
	2.判断token是否缓冲过期
	         如果缓冲过期  则在判断真实token是否过期 
	   				   如果真实过期  直接返回309309 
	   				   如果真实没过期  则放过请求
	         如果缓冲没过期  ,则直接放过请求
2.当访问前台过程中发现某接口返回的状态码为300300 ,token缓冲时间已过期,但是此时旧token会有1小时继续允许请求资源,不过是状态码会返回300300 ,如果请求接口本身失败返回300301
3.当请求返回300300,300301 时,立即发起新的请求刷新token,而之前返回的数据,还是正常解析(正常解析是对于300300和300301来说),(如果此时refeashToken也过期了会返回状态码301301,此时跳转登录页重新登录),刷新token返回成功后,将新token所有信息覆盖之前信息,
4.当请求返回309309特殊处理,还是按照之前传统方式

注意:刷新token接口一定要保证真实token如果没有到缓冲过期时返回的token还是之前的token

此方案的优势就在于如果在用户的使用过程中,token过期,不会直接拦截请求,而是给token一个缓冲时间,在缓冲时间范围内 ,过期的token还是可以访问并正常返回,只是状态码变了,当发现状态码变为300系列,只需在新发一个refashtoken,偷偷将本地token更换即可,这才叫无痛刷新!

最后给大家总结一下对比之前网站的刷新方案有什么优势:
传统

1.请求过期后,会直接拦截只返回token过期状态码,前台需要拿到过期状态码在去刷新token,刷新完token再次重新请求被拦截的请求(一次请求走了三个请求)
2.在用户使用过程中如果token过期,请求时间可能会过长

新方案
  1. 请求过期后,会给与缓冲时间,如果在缓冲时间范围内,前台判断返回值如果是300300和300301时,只需单独发起刷新token请求,无需理会已完成的请求,300300和300301时还是正常解析数据(始终是1次请求)
    当token返回309309时 才需要传统方案解决.
    2.在用户使用过程中不需要担心,缓冲时间就是为了在运行过程中解决无痛刷新问题
最后,如果此方案对大家有帮助,点点赞,关注一下再走呗,老弟打字也不容易呐
private UserInfo user;
/***
 * token
 */
private String token;
/***
 * 缓冲过期时间
 */
private Long bufferExpiration;
/***
 * 真实过期时间
 */
private Long realExpiration;
/***
 * 刷新token
 */
private String refreshToken;
/***
 * 刷新token过期时间
 */
private Long refreshExpiration;

可以关注下博主的公众号,实时推送解决方案!
公众号

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值