access token 和 refresh token 的设计

用户通过任何方式登入后,返回 access_tokenrefresh_token

access_token 过期时间较短,例如设为1天。refresh_token 过期时间较长,例如设为90天。

access_token 采用 JWT 格式,这种格式是自解释的,在请求资源服务器时,可以之间验证是否合法,而不需要通过认证服务器的验证。
而一旦被攻击者截获,则能一直使用,直到失效,但因为一般时间会设置的比较短,所以影响较小。

refresh_token 是存储在数据库中的,保持对每个用户只有一个是有效的。
refresh_token 用于 access_token 过期后重新获取新的,在获取新的时,同时刷新 refresh_token 自身,那么有效时间也重新刷新了。这么做的目的在于,如果用户一直在线,就不会需要用户来进行重新登入了。但是如果在 refresh_token 过期的这段时间内,一直没有请求过资源,那么这时就需要重新登入了。