请问 jwt 并发 请求 token 时, token 覆盖,有什么好的处理方法吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
libaibuaidufu
V2EX    Python

请问 jwt 并发 请求 token 时, token 覆盖,有什么好的处理方法吗?

  •  1
     
  •   libaibuaidufu 2019-05-17 10:50:29 +08:00 5863 次点击
    这是一个创建于 2354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如:在一个页面同时异步请求两个接口,这时 accesstoken 过期了,然后第一个请求去请求 refreshtoken ,后端覆盖了 accesstoken,第二个请求就出现 token 无效,要求重新登录。。。。

    17 条回复    2019-05-28 13:43:58 +08:00
    z960112559
        1
    z960112559  
       2019-05-17 11:13:48 +08:00
    当后端返回 accesstoken 过期时,中断所有请求,调用一个不能并发执行的方法刷新令牌,令牌刷新完后弄个回调函数重新去请求接口
    libaibuaidufu
        2
    libaibuaidufu  
    OP
       2019-05-17 11:17:49 +08:00
    查了一下资料,方案: 给 accesstoken 一个过期时间,然后每次请求验证 是否过期,当要过期时(离过期还有十分钟之内的)就去请求新的 token,然后后端 把旧的 token 缓存着,例如缓存十分钟,十分钟之内,使用旧的 token 依然可以请求。
    DavidNineRoc
        3
    DavidNineRoc  
       2019-05-17 11:23:51 +08:00
    可以参考 jwt-auth 的做法, 可以配置一个并发失效时间, 比如 2s,
    意思是即使这个 token 过期了, 那么这个 token 也能在 2s 内使用.
    micean
        4
    micean  
       2019-05-17 11:30:38 +08:00
    如果是 oauth2,一般框架会在返回令牌的时候给个过期时间,可以根据这个做提前处理

    话说回来,刷新令牌多刷几个又能怎么样……为什么要对访问令牌做废弃检查
    libaibuaidufu
        5
    libaibuaidufu  
    OP
       2019-05-17 11:49:20 +08:00
    @micean 因为存在数据库了 每次验证 都进行对比了 多刷的令牌 导致后面旧的令牌无法听过验证。。。。
    libaibuaidufu
        6
    libaibuaidufu  
    OP
       2019-05-17 11:50:09 +08:00
    @DavidNineRoc 我去看看 我用的 flask-jwt-extended 看看有没有这个配置。。。
    AngryPanda
        7
    AngryPanda  
       2019-05-17 11:53:02 +08:00
    请求 token 的操作由统一的 proxy 来负责,如果已经有请求发出去,则不再重复发送。
    mooncakejs
        8
    mooncakejs  
       2019-05-17 11:55:10 +08:00
    jwt 还要验证失效,那还不如随机 token。
    DavidNineRoc
        9
    DavidNineRoc  
       2019-05-17 11:55:17 +08:00
    @libaibuaidufu 如果没有这个配置, 可以自己设置, 也比较简单逻辑.
    建立一个中间件. 然后解析出 token 的有效信息. 得到 exp. 根据当前时间和 exp 对比, 如果过期在 2s 之内, 都允许通过.
    KKKKKK
        10
    KKKKKK  
       2019-05-17 12:16:00 +08:00 via iPhone
    JWT 是不储存过期时间在服务端的,过期时间储存在 token 里面,不能修改,所以要提前实战只能设置 black list
    micean
        11
    micean  
       2019-05-17 12:43:47 +08:00
    @libaibuaidufu
    我的意思是多发几个令牌对于你们业务有没有什么影响
    jwt 的令牌应该是签出去就有效,如果有废弃的需求,应该从令牌容纳的数据去设计,而不是废弃令牌本身
    saberlove
        12
    saberlove  
       2019-05-17 13:08:25 +08:00
    宽限时间了解一下
    whileFalse
        13
    whileFalse  
       2019-05-17 15:24:55 +08:00
    jwt 的意义就是不存后端也不直接废弃。如果你们存后端还要主动废弃,也不知道是想利用 jwt 的哪种特性。
    libaibuaidufu
        14
    libaibuaidufu  
    OP
       2019-05-17 16:37:28 +08:00
    @whileFalse 他们以前就这样用的 差不多 就是单一登录了。。。。。。
    libaibuaidufu
        15
    libaibuaidufu  
    OP
       2019-05-17 16:38:55 +08:00
    @saberlove 了解了一下 非常好,但是我用哪个插件似乎没有这个功能 要手动实现 。。。
    libaibuaidufu
        16
    libaibuaidufu  
    OP
       2019-05-17 16:52:46 +08:00
    @saberlove 找到配置了 。。。
    saberlove
        17
    saberlove  
       2019-05-28 13:43:58 +08:00
    emmm
    关于     帮助文档     自助推广系统     博客 &bsp;   API     FAQ     Solana     1042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:29 PVG 07:29 LAX 16:29 JFK 19:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86