我的 mongodb 是存储刷新令牌的正确位置吗?
Is my mongodb the right place to store my refresh tokens?
我正在尝试实现 JWT Token/RefreshToken 身份验证后端服务器。
那里有很多资源,它真的很有帮助,但不知何故没有告诉我 how/where 保存我的刷新令牌。
目前我正在使用 mongo 数据库来存储我的应用程序的信息。将我的刷新令牌存储在同一个数据库中是否安全?是否有我没有看到的更安全或更高效的解决方案?
理想情况下,您甚至不必将访问或刷新令牌存储在任何 数据库中。 JWT 模式背后的主要动机之一是消除在服务器中持久保存会话状态的需要。相反,会话状态在 JWT 令牌本身中维护。为了更好地理解这一点,让我们检查一下当服务器收到传入访问令牌时最简单的事件序列。
当服务器收到传入的访问令牌时,它要做的第一件事就是检查该令牌的 claims 部分。其中一项声明通常称为 exp
,包含令牌到期日期。使用过期令牌的服务器中的任何访问尝试都将被拒绝。服务器还可以通过计算 校验和 来确保传入的 JWT 未被篡改。任何过期或其他声明被篡改的令牌都将无法通过校验和测试。
这里的要点是,理想情况下,JWT 充当某种独立的护照。不需要将其存储在数据库中以进行比较或查找。有时,可能需要将某些 JWT 列入黑名单。在这种情况下,可能需要将它们存储在服务器上。但在这里我们仍然不会使用数据库,而是使用访问时间非常快的轻量级缓存。而且,我们只会存储极少数列入黑名单的 JWT,因此服务器仍将在很大程度上保持无状态。
我正在尝试实现 JWT Token/RefreshToken 身份验证后端服务器。 那里有很多资源,它真的很有帮助,但不知何故没有告诉我 how/where 保存我的刷新令牌。
目前我正在使用 mongo 数据库来存储我的应用程序的信息。将我的刷新令牌存储在同一个数据库中是否安全?是否有我没有看到的更安全或更高效的解决方案?
理想情况下,您甚至不必将访问或刷新令牌存储在任何 数据库中。 JWT 模式背后的主要动机之一是消除在服务器中持久保存会话状态的需要。相反,会话状态在 JWT 令牌本身中维护。为了更好地理解这一点,让我们检查一下当服务器收到传入访问令牌时最简单的事件序列。
当服务器收到传入的访问令牌时,它要做的第一件事就是检查该令牌的 claims 部分。其中一项声明通常称为 exp
,包含令牌到期日期。使用过期令牌的服务器中的任何访问尝试都将被拒绝。服务器还可以通过计算 校验和 来确保传入的 JWT 未被篡改。任何过期或其他声明被篡改的令牌都将无法通过校验和测试。
这里的要点是,理想情况下,JWT 充当某种独立的护照。不需要将其存储在数据库中以进行比较或查找。有时,可能需要将某些 JWT 列入黑名单。在这种情况下,可能需要将它们存储在服务器上。但在这里我们仍然不会使用数据库,而是使用访问时间非常快的轻量级缓存。而且,我们只会存储极少数列入黑名单的 JWT,因此服务器仍将在很大程度上保持无状态。