如:在一个页面同时异步请求两个接口,这时 accesstoken 过期了,然后第一个请求去请求 refreshtoken ,后端覆盖了 accesstoken,第二个请求就出现 token 无效,要求重新登录。。。。
如:在一个页面同时异步请求两个接口,这时 accesstoken 过期了,然后第一个请求去请求 refreshtoken ,后端覆盖了 accesstoken,第二个请求就出现 token 无效,要求重新登录。。。。
|
z960112559May 17, 2019
1
当后端返回 accesstoken 过期时,中断所有请求,调用一个不能并发执行的方法刷新令牌,令牌刷新完后弄个回调函数重新去请求接口
|
|
2
查了一下资料,方案: 给 accesstoken 一个过期时间,然后每次请求验证 是否过期,当要过期时(离过期还有十分钟之内的)就去请求新的 token,然后后端 把旧的 token 缓存着,例如缓存十分钟,十分钟之内,使用旧的 token 依然可以请求。
|
|
DavidNineRocMay 17, 2019
3
可以参考 jwt-auth 的做法, 可以配置一个并发失效时间, 比如 2s,
意思是即使这个 token 过期了, 那么这个 token 也能在 2s 内使用. |
|
miceanMay 17, 2019
4
如果是 oauth2,一般框架会在返回令牌的时候给个过期时间,可以根据这个做提前处理
话说回来,刷新令牌多刷几个又能怎么样……为什么要对访问令牌做废弃检查 |
|
5
@micean 因为存在数据库了 每次验证 都进行对比了 多刷的令牌 导致后面旧的令牌无法听过验证。。。。
|
|
6
@DavidNineRoc 我去看看 我用的 flask-jwt-extended 看看有没有这个配置。。。
|
|
AngryPandaMay 17, 2019
7
请求 token 的操作由统一的 proxy 来负责,如果已经有请求发出去,则不再重复发送。
|
|
mooncakejsMay 17, 2019
8
jwt 还要验证失效,那还不如随机 token。
|
|
DavidNineRocMay 17, 2019
9
@libaibuaidufu 如果没有这个配置, 可以自己设置, 也比较简单逻辑.
建立一个中间件. 然后解析出 token 的有效信息. 得到 exp. 根据当前时间和 exp 对比, 如果过期在 2s 之内, 都允许通过. |
|
KKKKKKMay 17, 2019 via iPhone
10
JWT 是不储存过期时间在服务端的,过期时间储存在 token 里面,不能修改,所以要提前实战只能设置 black list
|
|
miceanMay 17, 2019
11
|
|
saberloveMay 17, 2019
12
宽限时间了解一下
|
|
whileFalseMay 17, 2019
13
jwt 的意义就是不存后端也不直接废弃。如果你们存后端还要主动废弃,也不知道是想利用 jwt 的哪种特性。
|
|
14
@whileFalse 他们以前就这样用的 差不多 就是单一登录了。。。。。。
|
|
15
@saberlove 了解了一下 非常好,但是我用哪个插件似乎没有这个功能 要手动实现 。。。
|
|
16
@saberlove 找到配置了 。。。
|
|
saberloveMay 28, 2019
17
emmm
|