是否有充分的理由不将密码重置令牌存储在像 Redis 这样的键值存储中?
Is there a good reason not to store password reset tokens in a key value store like redis?
通常我将哈希密码重置令牌存储在数据库中,例如 MySQL。
在我当前的应用程序中,我使用 JWT 来减少数据库查询的数量。
我还使用 Redis 来跟踪有效的 JWT,现在我想知道为什么我不应该只将密码重置令牌保存在 Redis 中并将令牌映射到用户 ID + 时间戳(以拒绝旧令牌)。
我能想到的唯一原因是内存使用。
还有其他不这样做的原因吗?
您会引入一个故障点,即 Redis。
如果跟踪有效的 JWT 是检查 JWT 是否被撤销的一种方式,那么您可能已经遇到了那个故障点。如果 Redis 不可用会怎样?
您要么拒绝访问(因此是失败点),要么接受任何经过验证的 JWT 有效(未撤销)。
如果后者为真,则在 Redis 中存储重置令牌只会使依赖关系显式化:如果 Redis 出现故障,您将无法更改密码。
通常我将哈希密码重置令牌存储在数据库中,例如 MySQL。
在我当前的应用程序中,我使用 JWT 来减少数据库查询的数量。 我还使用 Redis 来跟踪有效的 JWT,现在我想知道为什么我不应该只将密码重置令牌保存在 Redis 中并将令牌映射到用户 ID + 时间戳(以拒绝旧令牌)。
我能想到的唯一原因是内存使用。
还有其他不这样做的原因吗?
您会引入一个故障点,即 Redis。
如果跟踪有效的 JWT 是检查 JWT 是否被撤销的一种方式,那么您可能已经遇到了那个故障点。如果 Redis 不可用会怎样? 您要么拒绝访问(因此是失败点),要么接受任何经过验证的 JWT 有效(未撤销)。
如果后者为真,则在 Redis 中存储重置令牌只会使依赖关系显式化:如果 Redis 出现故障,您将无法更改密码。