刷新JWT并确保客户端应用程序上的会话安全

时间:2019-05-04 18:14:19

标签: node.js reactjs rest express jwt

我有一个带有节点/表达后端的react应用。我目前正在使用JWT在后端调用受保护的路由。这一切都很好。但是我想让用户保持登录时间不超过30分钟左右。

当客户端应用程序过期时,处理保护会话或刷新访问令牌的最佳方法是什么?

我的解决方案:

-一个:

创建刷新和访问令牌。访问令牌的寿命短。并使用在数据库中提供给用户的唯一ID对刷新令牌进行签名。然后检查验证具有此ID的令牌。然后,当访问令牌过期时,发送回401,然后从本地存储中获取刷新令牌以创建新令牌,然后再次尝试调用。

问题所在:来回进行了很多,而且似乎很慢。

-两个

在每次呼叫时都发送刷新令牌和访问令牌,如果访问令牌已过期,请使用刷新令牌创建新令牌,然后继续。

存在的问题:我不明白为什么然后需要发送2个令牌,而我只能发送1个令牌并以此完成工作。但是,如果一个或两个令牌遭到破坏,它们将永远再生。

-三

将访问令牌过期发送到前端,如果令牌已过期,则发送刷新令牌并使用数据库中的唯一标识符对其进行验证。然后生成新令牌并继续。

问题所在:不确定这样做的安全性。但是目前看来,这似乎是最好的解决方案。

所以我想知道什么是处理过期时刷新访问令牌以便用户可以继续使用平台的最佳方法?

1 个答案:

答案 0 :(得分:0)

我是根据经验说这的,不是源而是JWT的整个想法,它是无会话的。还有另一种用于处理会话的解决方案。 使用jwt,您无需在使用秘密密钥签署JWT时将其保存在数据库中,而只需验证已使用您的秘密密钥发布了JWT。并且您可以发出该JWT有效期超过30分钟的通知。很好我本人将其设置为180天。而且由于时间太长,用户这次将再次登录,因此您不必担心到期时间。但是如果您也想处理该问题,则可以在前端对其进行解析,并检查其过期时间戳,并在过期之前获取另一个JWT。