Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Node.js 在nodejs中使用JWT刷新令牌的最佳实践_Node.js_Authentication_Jwt - Fatal编程技术网

Node.js 在nodejs中使用JWT刷新令牌的最佳实践

Node.js 在nodejs中使用JWT刷新令牌的最佳实践,node.js,authentication,jwt,Node.js,Authentication,Jwt,我在react原生应用程序中使用JSON Web令牌进行身份验证。当用户登录时,将创建一个令牌并发送给用户以存储在本地存储器中。令牌的有效期为24小时。每当调用服务器(nodejs)时,都会在头中发送令牌 问题是,24小时后,用户必须再次登录。我不想这样,所以我开始寻找解决方案。我找到的解决方案是:刷新令牌 到目前为止,我的方法是。如果我做错了,请纠正我 1) 用户登录。auth令牌和刷新令牌都被发送给用户以存储在本地存储器中。(这够安全吗?) 2) 用户希望更改其配置文件。我向服务器发送一个请

我在react原生应用程序中使用JSON Web令牌进行身份验证。当用户登录时,将创建一个令牌并发送给用户以存储在本地存储器中。令牌的有效期为24小时。每当调用服务器(nodejs)时,都会在头中发送令牌

问题是,24小时后,用户必须再次登录。我不想这样,所以我开始寻找解决方案。我找到的解决方案是:刷新令牌

到目前为止,我的方法是。如果我做错了,请纠正我

1) 用户登录。auth令牌刷新令牌都被发送给用户以存储在本地存储器中。(这够安全吗?)

2) 用户希望更改其配置文件。我向服务器发送一个请求,请求头中带有auth令牌

3) 服务器接收身份验证令牌。如果身份验证令牌仍然有效,请执行您必须执行的操作。如果身份验证令牌已过期,请检查用户是否有刷新令牌(该令牌仍然有效)。在这一点上,我被卡住了。我是否应该从服务器向用户发送一个新请求,并询问“您是否有刷新令牌?”如果有,请将此刷新令牌发送到服务器以创建新的身份验证令牌

我的问题如下:

假设用户希望从列表中获取最后10条消息。将向服务器发送带有身份验证令牌的请求

=>身份验证令牌有效:响应为10条消息的列表

=>身份验证令牌无效:响应是服务器向客户端发出的刷新令牌的新请求

这是两种不同的反应。这不会弄乱我客户端的代码吗?我该怎么处理


另一种方法是在每个请求中发送身份验证令牌刷新令牌。但这有意义吗?

您是说像OAuth2一样刷新令牌吗?如果是这样的话,它们通常只用于服务器客户端(而不是浏览器应用程序)。使用刷新令牌需要客户端身份验证才能检索新的访问令牌,这与仅将访问令牌发送到资源(通常仅允许其自身进行访问)不同

因此,不清楚使用刷新令牌是否会在这里添加任何内容。如果你认为让人们登录你的应用程序超过24小时是足够安全的,为什么不让会话持续更长时间并延长你发行的代币的生命周期呢

关于存储,在本地存储中保留安全信息是非常重要的。如果您确信您没有易受攻击的外部Javascript,并且您对站点使用了非常严格的标题,以防止任何内联Javascript或不需要的源,并且您的应用程序不是超高风险的,那么它可能没问题。

3)我是否应该从服务器向用户发送一个新请求,并询问以下问题……?-服务器从不向客户端发送请求。当访问令牌过期时,服务器应使用401响应,客户端应通过请求新的访问令牌对401响应作出响应。看见