后端不主动刷新token,前端只在必要时携带refresh_token去请求刷新token。
在使用JWT进行前后端分离的开发中,Token刷新机制是一个非常重要的问题。Token是一段有时限的字符串,用于验证用户身份和权限,如果Token过期,用户需要重新登录,这会对用户体验造成影响。因此,我们需要实现一种Token刷新机制,使得用户能够保持在线,同时又不会影响系统安全。
方案1
一种常见的Token刷新机制是:前端在每次请求前,去校验token是否快过期,如果接近过期,则向后端发送一个携带refresh_token的头的Token刷新请求。后端提供刷新token接口。后端校验refresh_token是否合法,合法则签发新的token。在代码层面还需要在刷新接口方法中加一个开关,防止多个请求同时请求刷新接口。这种机制能够保持用户在线,同时也能保证系统安全。变种形式是前端设置定时任务,每隔一段时间去请求刷新接口,但这个方法不够优雅。
方案2
另一种更为“无感”的Token刷新机制(方案2)是:当用户进行访问时,后端服务器会检查当前Token是否快过期,如果快过期则自动刷新Token,并将新Token返回给前端。这种机制能够完全保持用户在线,同时也无需用户重新登录或者手动刷新Token,提升了用户体验。这种方式有个风险,就是每个请求都需要携带refresh_token,让后端可以直接验证刷新token并返回。但这样refreshtoken就失去了存在的意义了。
方案3
以上2种方案是token过期前的刷新机制。如果长时间未操作页面,导致token过期,但是refresh_token还未过期,则需要另一种机制(方案3)去保证登录状态。当然也可以直接退出登录,返回登录界面。对于token过期后刷新的机制,当前端在发送请求前校验token,如果快过期或者已经过期,则将当前请求和后续请求进行缓存,先发送刷新token请求,当收到新的token后再使用新的token将缓存的请求继续发送。
总结
如果要长期保持登录状态推荐使用方案3。如果长时间未登录需要退出到登录界面则推荐方案1。方案2不推荐。
综上所述,Token刷新机制是JWT前后端分离开发中一个非常关键的问题,我们需要根据实际需求选择适合的刷新机制,以保证系统的安全性和用户体验。