前言

token 作为用户身份和权限的凭证,在每次请求的时候都需要携带上,否则服务端无法认出用户。但这也意味着,token 会被频繁暴露在网络中,增大了泄露的风险。因此 token 的有效期越短越好。但如果 token 的有效期被设置地太短了,就会导致用户需要频繁登录,造成用户体验不好。

因此就出现了 access_token 和 refresh_token 两个 token 对。access_token 是请求服务资源的实际 token,过期时间短。refresh_token 不是用于请求服务端资源的,而是用于请求生成 access_token 的,过期时间长。

这两个 token 对的出现就解决了上面的问题,用于实际请求服务资源的 access_token 时间短,在 access_token 过期后,前端拿着过期时间长的 refresh_token 再次请求一个 access_token,用于后续的资源请求。

refresh_token 只会在请求 access_token 的时候才会携带,因此使用不频繁,减小了暴露的风险。

实现

以下用 OAuth 的 refresh_token 和 access_token 的过程来说明,下图的 业务服务和认证服务两个服务器不用用心,也可以是同一个服务器。

access_token 和 refresh_token - 图1

参考和推荐

https://zhuanlan.zhihu.com/p/281414244