个人随笔
目录
前后端分离刷新登录令牌的小技巧
2025-05-20 21:34:57

通常我们的前后端分离项目,前端通过登录接口获取的token,有效期只有几分钟或者半个钟,毕竟我们的token是每次请求都需要在网络中传递的,有被泄露的风险。但是如果就设置为半个钟有效,用户使用过程中,在token无效的情况下会重定向到登录界面,影响用户的体验。那怎么办呢?

方案1、后台自动刷新token。

有些人可能会用后台自动刷新token的方法,也就是每次请求校验token的有效期,如果快过期了,比如离过期时间还有5分钟,就自动续期。
对于这种方法,如果你的请求是http,本人是不建议的,毕竟header和body都是裸奔在网络上,如果泄露出去,那么永远都不会失效啦,如果是https还好。

方案2、用刷新token刷新

我们可以在第一次用户登录返回token的时候,同时生成一个有效期比较长,比如一天或者十天半个月有效的刷新token也就是refresh_token,该token保存在前端的locaostorage中,等后台接口返回token失效的时候,就通过该刷新token去重新获取一个token回来,这里会专门有一个根据刷新token重新获取token的接口。

有些人可能会问,那这个刷新token有效期这么长,泄露出去岂不是会更加完蛋?其实大家不用太过担心,是会有这个风险,但是这个风险是比较低的,我们的刷新token跟登录token不一样,只会在登录的时候返回,然后要刷新的时候调用接口,这种情况下才会在网络上传播,所以泄露的风险极低,再者我们可以在刷新接口中校验客户端的ip和类型,若是被泄露出去,那么ip和客户端的类型有可能变化,我们就会报刷新失败,让前端重新跳转到登录页面。

这种方案,对于前端实现来说,会稍微复杂点,我们一个页面发起了10次请求,此时如果token失效,那么我们需要用个js变量控制保证前端只会有一个请求来调用刷新接口,同时把其它请求加入到请求队列中,等刷新接口拿到最新的token后,再把在请求队列中的请求重新调用返回。

 6

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2