【问题标题】:Is my mongodb the right place to store my refresh tokens?我的 mongodb 是存储刷新令牌的正确位置吗?
【发布时间】:2020-11-06 14:55:03
【问题描述】:

我正在尝试实现 JWT 令牌/RefreshToken 身份验证后端服务器。 那里有很多资源,而且真的很有帮助,但不知何故没有告诉我如何/在哪里保存我的刷新令牌。

到目前为止,我正在使用 mongo db 来存储我的应用程序的信息。将我的刷新令牌存储在同一个数据库中是否安全?有没有我没有看到的更安全或更高性能的解决方案?

【问题讨论】:

标签: mongodb authentication token refresh-token


【解决方案1】:

理想情况下,您甚至不必将访问或刷新令牌存储在 any 数据库中。 JWT 模式背后的主要动机之一是消除在服务器中保留会话状态的需要。相反,会话状态是在 JWT 令牌本身中维护的。为了更好地理解这一点,让我们检查一下服务器收到传入访问令牌时最简单的事件序列。

当服务器收到传入的访问令牌时,它首先会检查该令牌的 claims 部分。其中一项声明(通常称为exp)包含令牌到期日期。服务器中使用过期令牌的任何访问尝试都将被拒绝。服务器还可以通过计算校验和来确保传入的JWT没有被篡改。任何过期或其他声明已被篡改的令牌都将无法通过校验和测试。

这里的要点是,理想情况下,JWT 充当某种独立的护照。不需要将其存储在数据库中进行比较或查找。有时,可能需要将某些 JWT 列入黑名单。在这种情况下,可能需要将它们存储在服务器上。但是在这里我们仍然不会使用数据库,而是使用访问时间非常快的轻量级缓存。而且,我们只会存储极少数被列入黑名单的 JWT,因此服务器在很大程度上仍将保持无状态。

【讨论】:

  • 当您说 JWT 时,您是指主令牌、刷新令牌,还是两者兼而有之?如果我不保留刷新令牌,我该如何注销用户(如果我不能“删除”他的刷新令牌)?
  • 或者你是说我不应该将正在使用的刷新令牌列入白名单,而是将人们的刷新令牌列入黑名单如何注销? (然后在到期日期结束后删除所有列入黑名单的令牌?)
  • 是的...通常您会将 JWT 列入黑名单以强制注销。如果为此使用缓存,则缓存中条目的到期时间应与令牌的到期时间相匹配。对于碰巧已经过期的令牌,无需跟踪它们。
猜你喜欢
  • 2015-12-14
  • 2019-10-25
  • 2015-12-13
  • 2019-02-16
  • 2023-03-24
  • 2020-05-07
  • 2014-09-19
  • 2021-09-23
  • 2021-07-08
相关资源
最近更新 更多