JWT中token过期问题?

使用JWT生成token后为token设置一个过期时间(假设为30分钟)并且存在redis中,等到30分钟之后token会过期。但是如果我一直在浏览网站,那么30分钟之后token就不应该过期(过期之后就需要重新登录,这样逻辑很奇怪)。请问一下这样该怎么设计呢?

阅读 11k
4 个回答
  1. jwt生成的token不应该再存储在redis中,相关信息是存储在token中,每次请求的时候后端要解析这个token判断是否合法。
  2. jwt续期的操作通常是在第一步解析的时候,增加判断剩余的有效时间,超过某个临界点之后生成一个新的token返回到前端,前端检测到新的token之后替换旧的token。

我的看法:

jwt这个技术局限性太大,既无法统计在线人数,也无法将某个token强制设置为无效,想要取巧的设置token无效只能使用黑名单机制把token放到缓存里面,但是这个和jwt宣传的服务端不用存储token又背道而驰了...
使用JWT生成token后为token设置一个过期时间(假设为30分钟)并且存在redis中

JWT自带信息,服务器端只做验签不做存储,所以你可能说的就是普通的token,这种情况每次请求更新一下过期时间即可

无感刷新 token

思路:设置刷新时间和过期时间。比如刷新时间设置为2天,过期时间设置为2周;token 颁发2天内,请求接口时 token 有效、不刷新;token 颁发2天至2周内,请求接口时,token 有效,但达到了刷新时间,刷新重新颁发 token,把老的 token 加入黑名单,避免一刷多的问题。token 颁发2周后,请求接口时,token 失效,直接拦截请求。

请自行百度“JWT 续约/续租/续期”。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题