JWT 似乎不是 REST API 的安全解决方案
Posted
技术标签:
【中文标题】JWT 似乎不是 REST API 的安全解决方案【英文标题】:JWT seems to be not secure solution for a REST API 【发布时间】:2020-09-23 22:02:45 【问题描述】:我正在开发一个 REST API,但 JWT 在我看来是错误的。我们都称它们为“无状态令牌”,但实际上它们带来了很多问题。
我们都说,它们不应该存储在数据库或内存缓存解决方案中。但是对我来说,该 API 有 3 个核心条件,请告诉我如何在不访问/存储在 DB 中的情况下实现它们。
-
当用户更改密码时,令牌应该失效
立即。
当用户注销时,令牌应该失效
立即。
架构应该可以轻松地进行水平扩展。我不想惹麻烦。
如果我们在每个请求中针对这些条件进行数据库/缓存查找,JWT 是一个完全没用的解决方案,不是吗?
【问题讨论】:
有新的cmets吗? 【参考方案1】:我不相信 JWT 允许像您正在寻找的那样强制到期。您希望使用的更多的是参考令牌,可以在这里找到https://identityserver4.readthedocs.io/en/latest/topics/reference_tokens.html?highlight=reference。
话虽如此,JWT 仍然非常有用。但是,它们最好在非常短的到期日内实施。
【讨论】:
我看到很多 API 以错误的方式使用 JWT。因为,我在上面提到的条件对于 REST API 来说是非常常见的东西。如果您设置非常短的到期日期,那仍然不能提供正确的东西。一分钟就是一分钟。它应该失效,这是一个安全漏洞。 您可能会在 blog.logrocket.com/jwt-authentication-best-practices 找到一些关于如何使 JWT 令牌“过期”的答案。但是,这不是 JWT 框架中内置的逻辑,而是您必须在其之上构建的东西。 JWT 代币非常有用,但它们确实有一些权衡,必须接受其风险。 如果我为这些 JWT 令牌使用 Redis 白名单。会是什么?很难扩展吗? 我不确定。当我们需要严格的使任何令牌过期的能力时,我们会使用引用令牌。我之前没有使用过 Redis 缓存。 这个引用令牌是直接存储在数据库中的吗?以上是关于JWT 似乎不是 REST API 的安全解决方案的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot采用jwt作为REST API安全机制的应用示例