使用黑名单缓存使 JWT 失效是否安全?

Is it safe to invalidate a JWT using a blacklist cache?

我发现的最普遍的示例(以及 JWT-Auth 库中的代码)提供了通过黑名单使 JWT 无效的机制。如果令牌需要失效,它会被添加到黑名单中,黑名单本质上只是一个易受波动影响的缓存。

我对我的应用程序的担忧是,如果攻击者收到某人的 JWT,如果服务器被迫重新启动(或导致缓存被擦除的任何其他情况),JWT 将不会失效并且攻击者可以使用以前无效的令牌(尽管不太可能)。我目前正在决定实施参考令牌,这样可以手动使 JWT 失效,但是当您意识到并使您的令牌无效时,攻击者可能已经造成了损害。

是否暗示令牌的生命周期足够短,足以证明基于缓存使令牌无效(可能是 cleared/wiped/lost)?

这完全取决于您的威胁分析。您的应用程序是否必须如此安全,您 绝对 需要能够撤销受损的 JWT 令牌?

或者缩短代币的生存时间更有意义吗?例如,如果生存时间为一小时,则令牌在您的客户检测到盗窃、联系您的支持部门并让他们撤销令牌之前过期的可能性要高得多。

如果您仍然觉得需要能够撤销 JWT 令牌,请使用可以集中撤销的引用令牌。拥有自己的黑名单可能比它的价值更麻烦。如果将缓存保留在内存中,则必须处理崩溃和重启。如果你有多个服务器,你需要保持多个缓存同步或使用分布式缓存。