作者:浅笑那段情2502918773 | 来源:互联网 | 2022-12-11 11:31
我试图在基于Apollo的graphql server (2.0)中为基于JWT的身份验证找出这种情况.
基本上在登录后,用户从服务器获取accessToken和refreshToken.
AccessToken在一段时间后过期,服务器发送一条错误消息,表明令牌已过期(TokenExpiredError),然后客户端需要通过传递refreshToken与服务器进行新的accessToken通信.
流量如下 -
发生TokenExpiredError
在客户端获取该错误
使用旧的accessToken对所有请求进行排队(这样服务器不会被太多的refreshToken调用淹没,并且服务器会生成许多accessTokens)
在graphql server上调用refreshToken api以获取新的accessToken
使用新的accessToken更新所有授权呼叫的accessToken
注销用户incase refreshToken本身已过期
防止任何种类的竞争条件黑白电话
我已经在客户端实现了refreshToken变异但是无法弄清楚何时发生错误停止所有请求 - >请求新令牌 - >再次进行所有待处理请求以及刷新令牌是否已过期注销用户.