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

时间:2018-02-06 15:20:52

标签: security authentication web-applications jwt jwt-auth

我发现的最流行的例子(以及JWT-Auth库中的代码)提供了通过黑名单使JWT无效的机制。如果令牌需要被无效,则将其添加到黑名单中,该黑名单基本上只是一个易受波动影响的缓存。

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

是否暗示令牌的生命周期足够短,足以证明基于缓存(可能清除/擦除/丢失)使其无效?

1 个答案:

答案 0 :(得分:2)

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

或者让您的代币短暂的生存时间更有意义吗?如果生存时间是一个小时,那么在客户检测到盗窃之前,令牌已经过期的可能性要大得多,请联系您的支持部门并让他们撤销令牌。

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