2

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

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

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

4

1 回答 1

4

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

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

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

于 2018-02-07T04:33:51.107 回答