最近学习到了双token机制,这里说下我个人的理解
我设计的双token的流程即在用户登录时返回两个token,称为access_token和refresh_token,访问接口时,携带access_token,当access_token过期后,让前端携带refresh_token请求刷新token的接口获取新的两个token
refresh_token的过期时间一般设置为access_token的两倍
双token的好处是可以实现token的无感刷新,并且不会让用户一直保持登录状态,可以通过区分活跃用户和非活跃用户来实现让活跃用户来无感刷新。所谓活跃用户在双token中可以理解为access_token过期但是refresh_token没有过期时去访问程序的用户。非活跃用户如果较长时间没有登录过了,那么会导致使用refresh_token去请求刷新接口,因为refresh_token已经过期,那么也会刷新失败,需要重新登录。
双token还有一个好处就是安全性,因为前端每次都是携带过期时间较短的access_token,如果这个access_token被盗,那么利用的时间比较短。而且可以通过设置让refresh_token拥有独特的校验机制,使得access_token就算被盗用也无法作为refresh_token去获取新token,保障安全。
refresh_token只有在access_token过期的时候才会发送,安全性比较好,但是也是存在被盗窃的风险的
双token的缺点也是有的,access_token在得到刷新的结果前会有一段时间处于不可用的状态,为避免这种情况,前端可以主动判断token过期时间(由后台在返回token时返回),如果时间临近了,就主动去发送刷新请求
以上只是个人在学习中的见解,还有很多不足之处,各位大佬们可以批评指正