【问题标题】:Can we use JWT for Session management?我们可以使用 JWT 进行 Session 管理吗?
【发布时间】:2018-09-03 03:01:00
【问题描述】:

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

技术栈:(MERN) MongoDB Expressjs React 节点。

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

问题发生在现在:

  1. USER 1 注册
  2. 使用 USER 1 登录
  3. 成功登录后,从会话存储中复制令牌。
  4. 然后退出 USER 1
  5. USER 2 注册
  6. 使用 USER 2 登录
  7. USER 1 的会话存储令牌粘贴到 USER 2
  8. 在再次刷新页面 USER 1 仪表板而不是 USER 2 后。

以下两点的任何帮助或建议:

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

【问题讨论】:

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


【解决方案1】:

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

您应该为令牌添加一个过期时间以使其仅在短时间内有效,但您需要在它失效之前每隔一段时间刷新它。执行此操作的正常方法是使用刷新令牌,该令牌具有更长的间隔并阻止用户一次又一次地登录。

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

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

【讨论】:

  • 谢谢,Joachim,就我而言,我正在注销时删除令牌。你说令牌到期应该减少我并定期调用重置直到它到期。但是有可能从编码的令牌中解码“exp”和“iat”值。
  • 事实上,你可以解码 JWT 令牌并读取“exp”之类的属性。在使用 node.js 时,我使用 npmjs.com/package/jsonwebtoken 获得了最佳体验
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
相关资源
最近更新 更多