前端会有让 token 失效的需求,比如登出,因此需要向后端发请求,让后端保存一个让 token 失效的信息,比如后端存在数据库中,那么每次前端发请求的时候都要去查一次数据库,这显然与我们初衷不符。后端可以在生成 token 的时候给 token 配置一个失效时间,一般而言,这个失效时间很短(0.5-1h),这样,即使 token 在前端泄漏,但是由于其有效期很短,因此并不会造成很大的安全事故。然后 token 很短的话,对用户体验很不好,很可能造成用户在使用的过程中被强制退出,让用户重新登录,因此 access_token
和 refresh_token
应运而生。
access_token
: 用来授权认证的,也就是我们前面提到的 token,一般是用 JWT。refresh_token
: 一般是用来获取 access_token 的,可以是也可以不是 JWT,通常建议不是,而是一个随机数,存在数据库中,有效期也比较长。存在数据库中的好处是随时可以将其删除,比如登出的时候就可以将 refresh_token 从数据库中删掉。
总结来说,access_token
是调用授权关系接口的调用凭证,由于 access_token 有效期较短,当 access_token 超时后,可以使用 refresh_token 进行刷新,access_token 刷新结果有两种:
- 若 access_token 已超时,那么进行 refresh_token 会获取一个新的 access_token, 新的超时时间;
- 若 access_token 未超时,那么进行 refresh_token 不会改变 access_token, 但超时时间会刷新,相当于续期 access_token。