提问者:小点点

节点刷新令牌为什么不在后端刷新


嗨,伙计们,我是新概念的刷新令牌。

但我看到这是今天的一个标准。

我正在构建一个React/Node应用程序,我在这里看到很多文章,我们应该向服务器发送额外的请求来刷新令牌

如:https://medium.com/@monkov/react-using-axios-interceptor-for-token-refreshing-1477A4D5FC26

我的问题是,如果我们有中间件从cookie中检查访问令牌是否有效,为什么如果令牌无效,服务器返回401状态,那个访问令牌无效,然后我们从前端发送额外的请求来刷新令牌。

为什么不在中间件中检查来自cookie的令牌,并且也在中间件中刷新令牌并返回新的令牌,如果两者都无效则返回401状态,但是在教程中它们总是发送刷新令牌的额外请求


共2个答案

匿名用户

当你说中间件时,那是Angular的拦截器元素吗? 因为有不同的使用概念。

回到您的“身份验证+刷新令牌”问题。 这就是OAuth的工作原理。

大多数OAuth库都没有功能来检查刷新令牌是否有效,或者告诉您“Yay,那个刷新令牌是好的”。 如果OAuth库获得了一个刷新令牌,它将为您提供一对新的AUTH+refresh令牌(显然,它将检查刷新令牌是否有效以继续操作)。

更多信息:关于worfklow的RFC OAuth 2.0(https://tools.ietf.org/html/rfc6749)

关于在Cookie上存储令牌:

不要将承载令牌存储在Cookie中:实现不能将承载令牌存储在Cookie中,这些Cookie可以以clear(这是Cookie的默认传输模式)发送。 在cookie中存储承载令牌的实现必须采取预防跨站点请求伪造的措施。

来源:OAuth 2.0 RFC(https://tools.ietf.org/html/rfc6750)

匿名用户

您不想拥有自动刷新过期令牌的中间件,因为您不想拥有永不过期的令牌。

从技术上讲,没有什么可以阻止您拥有一个自动刷新服务器上过期令牌的中间件,事实上,您不需要编写中间件,只需将初始令牌的过期日期设置为将来的某个非常长的时间,因为自动刷新它就像确保它永不过期一样。

但出于安全考虑,你不应该这么做。 只要想想这样一个场景:攻击者设法获得用户的访问令牌; 如果您正在自动刷新过期的令牌,那么攻击者可以终身访问帐户,当然,除非您更改令牌签名--但您不知道要这样做。

更多关于令牌生命周期的信息,请点击此处