sft
  • 416

json web token过期后怎么搞

现在不是流行restful么,认证的时候用jwt,token有过期时间,有人说时间越短越好,
那过期后怎么认证,要在登录吗,过期时间多久比较好

阅读 27.2k
评论
    10 个回答
    Sloaix
    • 242

    楼上的都在说什么!不要乱误导人!你们到底看过 RFC7519 文档吗,你们有实现过JWT吗?!

    第一名说过期时间5秒的也是够了,居然还有赞!!!!

    segmentfualt现在的回答都是这种水准吗?

    JWT实现的时候,一般会有两个过期时间

    • 第一个是Token本身的过期时间,这个时间一般1到2个小时,不能太长,也可以在短一点,不过5s的简直纯属扯淡。

    • 第二个是Token过期后,再次刷新的有效期,也就是Token过期后,你还有一段时间可以重新刷新,把过期的Token发给服务端,如果没有过刷新截止期,则服务端返回一个新的Token,不再需要通过用户名密码重新登录获取Token了。

    所以为了减少过期后重新获取Token所带来的麻烦,我们一般在每次Http请求成功后,将目前的Token刷新,然后可以在Http响应中返回新的Token。

    JWT由于过期数据(exp claim)是封装在Payload中的,所以必须返回一个新Token,而不是在旧Token的基础上刷新。

    但是在并发的时候也会出现问题,如果前一个请求刷新了Token(为了安全,刷新后一般会把旧Token加入黑名单),后面的请求使用了一个旧的Token像服务请求数据,这个时候请求会被拒绝。

    可以说这真的是JWT的一个缺陷,目前没有特别好的办法来解决并发刷新的问题。

    不过可以通过设置一个宽限时间,在Token刷新后,如果旧Token仍处于刷新宽限时间内,就放行。

    我最近在写一个JWT的扩展包,给Lumen用的,如果想了解一些JWT的原理,构成,可以关注我的专栏,和这个系列的文章。

    Code杂货铺-lsxiao的知乎专栏

    从零实现Lumen-JWT扩展包

    评论 赞赏