token过期机制的问题

时间:2025-01-20 07:56:07

理解token过期


登陆成功之后,接口会返回一个token值,这个值在后续请求时通过请求头时带上(就像是开门钥匙)。但是,这个值一般会有有效期(具体是多长,是由后端决定),假如在我这里有效期是2小时。

如果你上午8点登陆成功,到了10:01分,则token就会失效,再去发请求时,就会报401错误。
 

解决方案:

第一种方案

在服务器端保存 Token 状态,用户每次操作都会自动刷新(推迟) Token 的过期时间。

该方案在前后端分离的情况下,每秒可能发起很多次请求,每次都去刷新过期时间会产生非常大的代价。如果 Token 的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率,减少消耗,会把 Token 的过期时保存在缓存或者内存中。

第二种方案

使用 Refresh Token,它可以避免频繁的读写操作。

这种方案中,服务端不需要刷新 Token 的过期时间,一旦 Token 过期,就反馈给前端,前端使用 Refresh Token 申请一个全新 Token 继续使用。

该方案中服务端只需要在客户端请求更新 Token 的时候对 Refresh Token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。

Refresh Token 也是有有效期的,但是这个有效期就可以长一点了,比如以天为单位。