JWT刷新Token策略:accessToken过期如何优雅续期

发布时间:2026/9/8 17:50:28
JWT刷新Token策略:accessToken过期如何优雅续期 JWT 刷新 Token 策略access token 过期如何优雅续期JWT 无状态、轻量但「过期了怎么办」是每个用它做鉴权的项目都要面对的问题。access token 设太长不安全设太短用户频繁掉线体验差。本文讲清楚三种续期策略并重点给出「双 tokenaccess refresh」的落地代码。一、问题案例统一网关用 JWT 做鉴权登录后签发 token有效期 24 小时。上线后收到大量反馈用户每天第一次打开都要重新登录体验很差。把有效期从 24 小时改成 30 天安全性立刻下降——token 一旦泄露30 天内都能冒充用户。这就陷入两难有效期短频繁掉线有效期长泄露风险大。二、原理详解三种续期策略策略一单 token滑动续期每次请求都重新签发一个新 token顺延过期时间。优点是简单缺点是每次都刷新且「有状态」——需要在服务端记录或频繁写库和 JWT 的无状态理念相悖。策略二单 token快过期时续期请求时如果发现 token 剩余有效期不足比如小于 1 小时就签发新 token 返回。折中方案实现简单适合中小项目。策略三双 token推荐签发两个 tokenaccess token短期如 30 分钟用于业务请求放在内存泄露窗口小。refresh token长期如 7 天只用于「换新 access token」存储更安全。access token 过期后用 refresh token 换新用户无感续期。这是业界主流方案OAuth2 的授权码模式就是这个思路。三、实战代码双 token 落地1. 登录时签发两个 tokenpublicMapString,Stringlogin(Stringusername,Stringpassword){// 校验账号密码略StringaccessTokenjwtUtil.generate(username,30*60);// 30 分钟StringrefreshTokenjwtUtil.generate(username,7*24*3600);// 7 天returnMap.of(accessToken,accessToken,refreshToken,refreshToken);}2. 刷新接口PostMapping(/refresh)publicMapString,Stringrefresh(RequestBodyRefreshRequestrequest){// 1. 校验 refresh token 是否有效、未过期StringusernamejwtUtil.verify(request.getRefreshToken());if(usernamenull)thrownewBusinessException(401,登录已过期请重新登录);// 2. 签发新 access token可顺带轮换 refresh token降低泄露风险StringnewAccessjwtUtil.generate(username,30*60);returnMap.of(accessToken,newAccess);}3. 前端无感续期// 请求拦截器access token 过期收到 401 时用 refresh token 换新后重试asyncfunctionrequest(config){letresawaitaxios(config)if(res.status401!config._retried){constnewAccessawaitrefresh()// 调 /refresh 换新 access tokenconfig.headers.AuthorizationBearer newAccess config._retriedtrueresawaitaxios(config)// 重试原请求}returnres}四、安全要点refresh token 别放 localStorage易被 XSS 窃取优先放 httpOnly cookieaccess token 可放内存减少持久化暴露面。refresh token 建议一次性轮换每次刷新都换新的 refresh token旧的立即作废能显著降低泄露后的危害。refresh token 要能主动吊销注销、改密时服务端要能使其失效存一份可校验的记录或黑名单否则泄露后无法收回。五、总结access token 设短、refresh token 设长用「双 token」平衡安全与体验。刷新接口只认 refresh token前端 401 时无感续期。refresh token 用 httpOnly cookie 存、支持轮换和吊销才能守住安全底线。我是无羡小剑全栈偏后端的独立开发者。作品集无羡 · 独立开发者作品集如果对你有帮助欢迎点赞、收藏、关注。