为什么需要refresh token
refreshToken就是用来在accessToken过期以后来重新获取accessToken的
0.使用流程
-> 1.登录成功获得 refresh token 并持久化
-> 2.通过 refresh token 请求刷新得到 access token 并临时储存
-> 3.请求业务接口使用 access token
-> 4.access token 过期或者快过期再次回到「 2 」
-> 5.refresh token 也过期则生命周期结束,需重新登录
1.使用场景来看
- 如果是一个前后端分离的项目,使用springsecurity+jwt这种,前端用户在登录以后,后端返回给前端一个accessToken,如果没有refresh token,又因为因为安全原因accessToken过期时间会设置的比较短,在accessToken过期以后,用户将会被强制重新登录,影响用户体验
而如果使用refresh Token,如果用户持续地访问这个网站,他们可以一直保持登录状态,而不需要定期重新登录 - 如果是业务服务器之间的相互调用,那么此时只用一个Access Token即可,强制重新登录影响不大,只不过是如果使用 Refresh Token 在获取新的 Access Token 的时候比直接重新登录会方便一小丢丢
2.从是否需要读取额外的状态来看
token 的过期时间一般会比 refeshToken 的过期时间短很多,保证 token 被盗取后无法持久的做坏事,通过 AccessToken 访问,只要通过签名校验合法即可通行,无需读取额外的状态来进一步确认是否撤销,当 AccessToken 过期以后再通过 RefreshToken 读取额外的状态(数据库 /缓存)确认是否继续签发
3.从安全程度来看
access token 有效期短 被盗损失更小 安全性更高
如果refresh token被盗了 想刷新access token的话 也需要提供过期的refresh token 盗取难度增加
同时refresh token只有在第一次获取和刷新access token时才会在网络中传输,因此被盗的风险远小于access token 从而在一定程度上 更安全了一点
所谓的更安全就是让盗取信息者更不容易获得而已
关于 token 过期的疑惑,为什么需要 refresh token? - 糯米PHP (nuomiphp.com)
没有理解refresh token的必要性或者说其为何比access token安全
Web API与OAuth:既生access token,何生refresh token
RFC 6819: OAuth 2.0 Threat Model and Security Considerations (rfc-editor.org)