通常我将散列的密码重置令牌存储在像mysql这样的数据库中。在我当前的应用程序中,我使用jwt来减少数据库查询的数量。我还使用redis来跟踪有效的jwt,现在我想知道为什么我不应该只在redis中保存密码重置令牌,并将令牌Map到用户id+时间戳(以拒绝旧令牌)。我能想到的唯一原因就是内存使用。还有别的理由不这样做吗?
3df52oht1#
您将引入一个失败点,即redis。如果跟踪有效的jwt是检查jwt是否被撤销的一种方法,那么您可能已经有了那个失败点。如果redis不可用怎么办?您可以拒绝访问(因此出现故障点),或者接受任何已验证的jwt作为有效的(未撤销)。如果后者为真,那么在redis中存储reset令牌只会使依赖关系显式化:如果redis关闭,则不能更改密码。
1条答案
按热度按时间3df52oht1#
您将引入一个失败点,即redis。
如果跟踪有效的jwt是检查jwt是否被撤销的一种方法,那么您可能已经有了那个失败点。如果redis不可用怎么办?您可以拒绝访问(因此出现故障点),或者接受任何已验证的jwt作为有效的(未撤销)。
如果后者为真,那么在redis中存储reset令牌只会使依赖关系显式化:如果redis关闭,则不能更改密码。