javascript – 在node.js中更改密码和注销时使JWT无效的最佳做法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在node.js中更改密码和注销时使JWT无效的最佳做法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2661字,纯文字阅读大概需要4分钟。
内容图文
我想知道在更改密码/注销时不使用db而使JWT无效的最佳实践.
我有以下想法通过点击用户数据库处理上述2个案例.
1.密码更改,我检查存储在用户db中的密码(散列).
2.注销时,我在用户数据库中保存了最后注销时间,因此通过比较令牌创建时间和注销时间,我可以使这种情况无效.
但是这两种情况是以每次用户点击api时命中用户数据库为代价的.任何最佳实践表示赞赏.
更新:
我不认为我们能够在不击中db的情况下使JWT无效.所以我想出了一个解决方案.我已经发布了我的答案,如果您有任何疑虑,欢迎您.
解决方法:
使用No Refresh令牌时:
1.更改密码时:当用户更改密码时,请注意用户数据库中的更改密码时间,因此当更改密码时间大于令牌创建时间时,令牌无效.因此剩余的会话很快就会被注销.
2.当用户注销时:当用户注销时,将令牌保存在单独的数据库中(例如:InvalidTokenDB并在令牌过期时从Db中删除令牌).因此,用户从相应的设备注销,他在其他设备中的会话保持不受干扰.
因此,在使JWT无效时,我遵循以下步骤:
>检查令牌是否有效.
>如果有效,请检查它是否存在于invalidTokenDB(存储已注销令牌的数据库中,直到其到期时间).
>如果不存在,则检查令牌创建时间并更改用户db中的密码时间.
>如果更改密码时间<令牌创建时间,然后令牌有效.
关注上述方法:
>对于每个api请求,我需要遵循上述所有步骤,这可能会影响性能.
使用刷新令牌时:访问令牌到期为1天,刷新令牌作为终身有效性
1.更改密码时:当用户更改密码时,请更改用户的刷新令牌.因此剩余的会话很快就会被注销.
2.当用户注销时:当用户注销时,将令牌保存在单独的DB中(例如:InvalidTokenDB并在令牌过期时从Db中删除令牌).因此,用户从相应的设备注销,他在其他设备中的会话保持不受干扰.
因此,在使JWT无效时,我遵循以下步骤:
>检查令牌是否有效
>如果有效,请检查令牌是否存在于InvalidTokenDB中.
>如果不存在,请使用userDB中的刷新令牌检查刷新令牌.
>如果等于,则为有效令牌
关注上述方法:
>对于每个api请求,我需要遵循上述所有步骤,这可能会影响性能.
>如何使刷新令牌无效,因为刷新令牌没有效力,如果黑客使用它,仍然认证是有效的,请求将始终成功.
注意:虽然Hanz提出了一种在Using Refesh Token in Token-based Authentication is secured?中保护刷新令牌的方法,但我无法理解他在说什么.任何帮助表示赞赏.
所以,如果有人有好的建议,欢迎您提出意见.
更新:
我正在添加答案,因为您的应用程序不需要刷新令牌,终身有效期.这个答案是由Sudhanshu(https://stackoverflow.com/users/4062630/sudhanshu-gaur)给出的.谢谢Sudhanshu.所以我相信这是最好的方法,
当需要无刷新令牌且访问令牌没有到期时:
当用户登录时,在其用户数据库中创建一个没有到期时间的登录令牌.
因此,在使JWT无效时,请按照以下步骤操作,
>检索用户信息并检查令牌是否在他的用户数据库中.如果允许的话.
>当用户注销时,仅从其用户数据库中删除此令牌.
>当用户更改其密码时,从他的用户数据库中删除所有令牌并要求他再次登录.
因此,使用这种方法,您不需要在数据库中存储注销令牌,直到它们到期,也不需要在更改上述情况下所需的密码时存储令牌创建时间.但是我相信这种方法只有在您的应用程序具有不需要刷新令牌并且令牌没有到期的要求时才有效.
如果有人担心这种方法,请告诉我.欢迎你的评论:)
内容总结
以上是互联网集市为您收集整理的javascript – 在node.js中更改密码和注销时使JWT无效的最佳做法?全部内容,希望文章能够帮你解决javascript – 在node.js中更改密码和注销时使JWT无效的最佳做法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。