JWT 的定义
有关jwt的定义资料没有具体写,关于具体的原理及理论点,想了解的可以点击下面两个连接去了解,写的不错,比较完善。
使用过程中遇到的问题
这里主要讲一下,JWT的动态刷新,默认的话设置的过期时间比较长,存在两个问题:
- JWT的过期时间设置太短,那么意味着过期的频率高,又可能用着用着就过期了,一般过期之后就会强制重新登录,重新获取新的JWT,进行访问后台的签名验证,这样可能造成用着用着就退出到登录页面了,用户体验不好。
- 如果过期时间设置较长,虽然不会造成自动退出的不好使用体验,但是从数据安全的角度考虑,就有可能被其他人利用JWT进行请求攻击,造成一系列损失。
解决思路
字段备注:
过期时间: JwtExpiredTime
刷新时间: JwtRefreshTime
思路:设置一个刷新jwt的时间,请求的时候发现到了过期时间,则触发jwt刷新事件,返回一个新的token。
比如jwt的过期时间: JwtExpiredTime=10(分钟)
jwt的刷新时间: JwtRefreshTime=5(分钟)
那么:
- 1-5分钟安全期:正常请求。
- 5-10分钟属于刷新期:在这个时间段的请求都会触发刷新事件。
- 超过10分钟再次访问jwt就已经过期了,此时直接触发过期方法,强制退出登录。
针对上述第二步处于刷新期间时,也就是在5-10分钟期间,不管是那个请求进来,都会触发刷新事件,此时需要考虑几个问题就是:
- 只有第一个进来的请求会触发刷新事件,此时会返回一个新的jwt给前端,既然是请求就避免不了并发,所以在刷新事件外面要做好任务锁,控制请求一个一个的进行,但是没有办法标识是否是更新过的jwt,因为跟新之后,下一个请求可能还带着上一次的jwt进来,此时因为没过期还是可以验证的,但是此时是不需要刷新jwt的,所以这个地方需要做一个记录,记录每一次jwt的生成,刷新的时候,将之前得jwt设置为已刷新,这样进来的时候不仅要判断时间范围,还有判断是否更新过,只有在刷新期,且没有更新过的才需要更新。
未完待续。。。。
标签:10,请求,过期,JWT,jwt,刷新,动态 来源: https://blog.csdn.net/u012577058/article/details/108743528
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。