Django JWT中JWT_EXPIRATION_DELTA与JWT_REFRESH_EXPIRATION_DELTA的区别
核心区别解析:
JWT_EXPIRATION_DELTA vs JWT_REFRESH_EXPIRATION_DELTA 先直接给你划清这俩参数的本质边界,再结合你的场景解释为什么会出现“20秒后还能登录”的情况:
1. JWT_EXPIRATION_DELTA:访问令牌的「直接有效时长」
这个参数控制的是你拿到的JWT访问令牌本身的存活时间——就像一张临时门禁卡,过了这个时间,这张卡直接刷不开门了。你设成20秒,意味着20秒后,用这个旧令牌请求需要认证的接口,会直接返回权限错误。
但它不管你能不能换一张新的门禁卡。
2. JWT_REFRESH_EXPIRATION_DELTA:刷新令牌的「有效窗口期」
这个参数管的是从第一次签发令牌开始,你能在多长时间内用旧令牌(哪怕已经过期)去兑换全新的访问令牌。默认7天,意思是:
- 只要在这7天里,哪怕你的访问令牌已经过期(比如你设的20秒到了),你都可以调用刷新接口,用之前存的刷新令牌(一般和访问令牌一起返回给前端)换一张新的访问令牌,继续保持登录状态。
- 只有当超过这个7天的窗口期,你才必须重新输入账号密码登录,生成新的令牌对。
为什么你20秒后重启浏览器还能登录?
你的前端大概率做了自动刷新的逻辑:当旧的访问令牌快要过期/已经过期时,会自动调用刷新接口,用刷新令牌换一张新的访问令牌,并把新令牌存在本地(比如localStorage或者cookie)。所以你20秒后重启浏览器,本地存的已经是刚刷新好的新令牌了,自然还处于登录状态。
最后提炼核心差异
- 作用对象:
JWT_EXPIRATION_DELTA管单张访问令牌的有效期,JWT_REFRESH_EXPIRATION_DELTA管整个登录会话的最长有效期 - 失效后果:访问令牌过期→可以用刷新令牌续期;刷新窗口期过了→必须重新登录
- 设计逻辑:短的
JWT_EXPIRATION_DELTA是为了降低令牌被盗用的风险(哪怕被盗,有效期短),JWT_REFRESH_EXPIRATION_DELTA则是平衡安全性和用户体验(不用频繁登录)
内容的提问来源于stack exchange,提问作者user9487981
相关产品推荐
相关产品推荐

