节点js jwt认证
Posted
技术标签:
【中文标题】节点js jwt认证【英文标题】:Node js jwt authentication 【发布时间】:2021-01-09 01:20:54 【问题描述】:所以我最近使用 jwt 在我的服务器中创建了一个身份验证系统,一切正常,但是当我想创建 logout 路由时,我意识到了一些事情:
jwt 无法取消验证,而是我所做的是将这些令牌与登录用户的 id 一起存储在 mongodb 中,因此每次用户登录时,令牌都会保存到数据库中,但使用 sha256 算法在一个不同的集合中。
-我仅将它用于验证目的,因此当我们点击受保护的路由时,例如我们检查我们拥有的当前令牌 (来自标头或 cookie) 在数据库中是否有效,然后我们使用jwt.verify()
和其他验证步骤验证它是否被发现
我基本上将令牌列入白名单。
好处:
-每当我想注销用户时,我只需从数据库中删除该令牌 -如果我想注销所有使用此帐户的用户,则删除所有具有当前配置文件 ID 的令牌...
现在是我的问题:
我的方法可行吗? 这对安全性有害吗(请记住,令牌是散列存储的)?【问题讨论】:
这能回答你的问题吗? How to destroy JWT Tokens on logout? 谢谢,有点,但我只是想知道我提出的当前实现是否正确 【参考方案1】:如果你给 jwt 令牌一个过期时间而不是你想将它存储在数据库中的原因,你也可以从用户对象中签署你想要的数据,这样就不会出现密码泄漏或会话令牌泄漏的问题,而且每次当你想要从 jwt 令牌中获取一些东西,您必须从数据库中获取它并且必须对其进行解码,这变得很漫长,最好不要将令牌存储在数据库中。
当您可以将令牌存储为客户端 cookie 或会话存储时。每当你想要令牌时,你必须在你的授权文件中对其进行解码,并且必须请求 id 或其他任何你想要的东西
您可以将其存储在本地存储中,但不推荐。你可以看看这个blog
现在由您决定将其存储在哪里,如果您想了解更多信息,请查看 thread
【讨论】:
我同意你的观点,但是说我想知道所有使用此帐户登录的用户,也许以后将他们注销,如果不将这些令牌保存在数据库中,如何实现呢? 看看这个***.com/q/49104698/12761193可能会帮助你了解更多。以上是关于节点js jwt认证的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JWT 从前端(角度 4)将密钥传递到后端(节点 js)