Mic*_*oka 25
TLDR:如果你想要在某些时候撤销令牌的能力,是的,将它存储在像Redis这样快速的东西中.
使用JWT的一个明显缺点是,如果用户需要注销或令牌已被泄露,则没有简单的方法来撤销令牌.撤销令牌意味着在一些存储中查找它然后决定下一步该做什么.由于JWT的一个要点是避免往返db,所以一个很好的折衷方案是将它存储在比rdbms更少的东西中.这对Redis来说是一个完美的工作.
正如评论中所建议的那样,一个好的方法是使列表成为黑名单(即无效令牌列表).在每次请求时,您都会查找列表以确保令牌不存在.通过使用概率算法存储令牌,您可以在查找步骤中进一步改善内存空间和性能.一个简单的实现是不将整个令牌存储在redis黑名单中.只需存储令牌的前几个字符.然后,您可以使用更持久的解决方案(文件系统,rdbms等)存储更全面的黑名单.这是一个乐观的查找,仍然会很快告诉您黑名单中不存在令牌(这是更常见的情况).如果正在查找的令牌碰巧匹配redis黑名单中的项目(因为它的前几个字符匹配),则转移到持久性存储上的额外查找.为此实现算法的另一个更有效且相对简单的是称为布隆过滤器.
| 归档时间: |
|
| 查看次数: |
11017 次 |
| 最近记录: |