Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点刷新令牌为什么不在后端刷新_Javascript_Node.js_Reactjs_Express - Fatal编程技术网

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

Javascript 节点刷新令牌为什么不在后端刷新,javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,嗨,伙计们,我对刷新令牌的概念还不熟悉 但我知道这是今天的标准 我正在构建一个React/Node应用程序,我在这里的许多文章中看到,我们应该向服务器发送额外的请求以刷新令牌 就像这里: 我的问题是,如果我们有中间件来检查cookie中的访问令牌是否有效,为什么如果令牌无效,服务器返回401状态,访问令牌无效,然后我们从前端发送额外的请求来刷新令牌 为什么不在中间件中检查cookie中的令牌,并在中间件中刷新令牌并返回新令牌,如果两者都无效,则返回401状态,但在中的教程中,它们总是发送额外的刷

嗨,伙计们,我对刷新令牌的概念还不熟悉

但我知道这是今天的标准

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

就像这里:

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


为什么不在中间件中检查cookie中的令牌,并在中间件中刷新令牌并返回新令牌,如果两者都无效,则返回401状态,但在中的教程中,它们总是发送额外的刷新令牌请求,当您说
中间件
,这是Angular的
拦截器
元素吗??因为有不同的使用概念

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

大多数OAuth库没有检查刷新令牌是否有效的功能,或者没有对您说“是的,该刷新令牌没有问题”。如果OAuth库获得一个刷新令牌,它将为您提供一对新的auth+refresh令牌(显然,它将检查刷新令牌是否有效以继续)

更多信息:RFC OAuth 2.0关于worfklow()

关于在Cookie上存储代币:

不在cookie中存储承载令牌:实现不能存储 Cookie中可在clear中发送的承载令牌(其中 是cookies的默认传输模式)。启动位置 在cookies中存储持票人代币的人必须采取预防措施 防止跨站点请求伪造


来源:OAuth 2.0 RFC()

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

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

大多数OAuth库没有检查刷新令牌是否有效的功能,或者没有对您说“是的,该刷新令牌没有问题”。如果OAuth库获得一个刷新令牌,它将为您提供一对新的auth+refresh令牌(显然,它将检查刷新令牌是否有效以继续)

更多信息:RFC OAuth 2.0关于worfklow()

关于在Cookie上存储代币:

不在cookie中存储承载令牌:实现不能存储 Cookie中可在clear中发送的承载令牌(其中 是cookies的默认传输模式)。启动位置 在cookies中存储持票人代币的人必须采取预防措施 防止跨站点请求伪造


Source:OAuth 2.0 RFC()

您不希望有一个中间件自动刷新过期的令牌,因为您不希望有一个永不过期的令牌

从技术上讲,没有什么能阻止您在服务器上拥有一个自动刷新过期令牌的中间件,事实上,您不需要编写中间件,只需将初始令牌的过期日期设置为将来很长的时间,因为自动刷新它与确保它永远不会过期是一样的

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


更多关于令牌生命周期的详细信息

您不希望有一个中间件自动刷新过期令牌,因为您不希望有一个永不过期的令牌

从技术上讲,没有什么能阻止您在服务器上拥有一个自动刷新过期令牌的中间件,事实上,您不需要编写中间件,只需将初始令牌的过期日期设置为将来很长的时间,因为自动刷新它与确保它永远不会过期是一样的

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


更多关于代币生命周期的详细信息

谢谢您的时间,我们将查看答案。当我说中间件时,我想到了节点->后端上的Express中的中间件如果不在Cookie中存储令牌的位置,我读到也不建议使用localStorage,还有为什么在第一个请求中我们需要向服务器发送第二个请求来刷新令牌?这不是关于在Cookie或localStorage上存储令牌的问题(如果您考虑一下,您需要将它们存储在某个地方),据我所知,这两者都是可以接受的。这是关于您如何与后端和前端进行通信。您不应该通过cookie发送令牌,因为它们发送不安全。您应该在请求正文中发送令牌(以两种方式)。我不明白你的
为什么我们需要发送第二个请求
?你只需要请求一次新的令牌,一旦你知道它们已经过期。谢谢你的时间,答案会检查出来。当我说中间件时,我想到的是节点中的中间件->后端上的Express如果不在cookie中,在哪里存储令牌,我读到localStorage也不会重新启动还有,为什么我们需要在第一个请求中刷新令牌时向服务器发送第二个请求?这不是关于将令牌存储在Cookie或localStorage上(如果您考虑过,您需要将它们存储在某个位置),据我所知,这两者都是可以接受的。这是关于您如何与后端和前端通信。这是您应该做的