Osc*_*car 3 javascript authentication node.js express jwt
我正在尝试编写身份验证应用程序的密码重置部分。我选择使用 JWT、node.js 并表达我使用以下逻辑的位置:首先,用户输入他们的电子邮件,并生成一个令牌并通过密码重置链接发送到用户的邮件中。第二,当用户按下链接时,一个功能被设置为检查令牌是否正确以及它是否仍然有效,第三我有一个将新密码保存到数据库的功能。
我不确定的是应该检查令牌的第二步。一些教程说您应该将令牌保存到数据库中,然后将链接中的令牌与数据库中的令牌进行比较。但是,使用 JWT 不将任何内容保存到数据库中作为参考难道不是重点吗?我不应该只使用 jwt.verify 来获取保存在令牌中的信息,然后检查数据库中的用户是否仍然处于活动状态?
这是使用 JWT 的正确方法吗?或者你会建议我使用 session 而不是 JWT?
小智 7
使用 JWT 实现重置密码存在一个简单的缺陷。从当前的实现来看,用户可以多次生成重置密码链接。因此,用户在给定时间内可以拥有多个活动重置令牌。
是的,可以采用 JWT 无状态,但在这种情况下效率不高,因为您可以拥有多个令牌,即使在用户重置密码后也可以使用这些令牌来重置密码(取决于您的方法)。
我在一个测试和安全至关重要的组织中工作。您的实施将不会被允许。 规则是一次只能激活一个重置密码链接。
所以 JWT 令牌对我们来说并不是最好的选择。
所以我要做的就是生成一个保存在数据库中的随机令牌(也包含当前时间)。该令牌用于识别用户,时间用于验证用户是否在给定时间内重置。
当令牌处于活动状态时,如果用户决定再次生成令牌,则在生成新令牌之前,前一个令牌将变为非活动状态。
此方法的优点是您一次只能拥有一个活动令牌。
最后,如果您不介意用户一次拥有多个活动令牌/链接,则应使用 JWT。
| 归档时间: |
|
| 查看次数: |
7688 次 |
| 最近记录: |