我们可以使用JWT进行会话管理吗?

时间:2018-03-24 15:32:25

标签: node.js reactjs express jwt express-jwt

在我自己的应用程序中引入JWT之后。我面临一些问题,可能是我做错了。请告诉我最好的实施方式。

技术堆栈:( MERN)MongoDB Expressjs反应节点。

成功登录后,我通过在其中添加“user-id”并返回UI层来创建新的JWT令牌。在UI结束时,我将该令牌存储在会话存储中。这个令牌我用于服务器的所有进一步请求。在进入控制器之前,我正在使用JWT验证检查中间件中的令牌以进行验证。如果成功验证,则next()else返回带有无效令牌的错误。

现在发出诅咒:

  1. 注册 USER 1
  2. 使用 USER 1
  3. 登录
  4. 从会话存储成功登录后复制令牌。
  5. 然后退出 USER 1
  6. 注册 USER 2
  7. 使用 USER 2
  8. 登录
  9. USER 1 的会话存储令牌粘贴到 USER 2
  10. 再次刷新页面 USER 1 信息中心,而不是 USER 2
  11. 有关以下两点的任何帮助或建议:

      
        
    • 我应该如何通过JWT管理用户会话?
    •   
    • 如何通过JWT管理API身份验证?
    •   

1 个答案:

答案 0 :(得分:1)

您应该不在浏览器会话中存储令牌,或者至少在注销时将其删除。令牌包含有关用户以及签名的所有信息,用于验证令牌的有效性。如果你复制&存储它,它仍然有效。注销用户不会使令牌失效。

您应该为令牌添加一个到期时间,使其仅在很短的时间内有效,但您需要在它失效之前按间隔刷新它。执行此操作的常规方法是使用间隔较长的刷新令牌,并防止用户一次又一次地登录。

当用户注销时,您应该停止从刷新令牌重新发出访问令牌。

有关JWT的更多信息,请参阅https://jwt.io/introduction/