首页 > 解决方案 > JWT 好像不安全?不是吗?

问题描述

我正在开发一个 REST API,但 JWT 对我来说看起来不对。我们都称它们为“无状态令牌”,但实际上它们带来了很多问题。

我们都说,它们不应该存储在数据库或内存缓存解决方案中。但是对我来说,该 API 有 3 个核心条件,请告诉我如何在不访问/存储在数据库中的情况下实现它们。

当用户更改密码时,令牌应立即失效。当用户注销时,令牌应立即失效。该架构应该可以轻松地水平扩展。我不想惹麻烦。如果我们在每个请求中针对这些条件进行数据库/缓存查找,JWT 是一个完全没用的解决方案,不是吗?

标签: restsecurityjwt

解决方案


根据您的要求,它们大多不适合。您可以在服务器端使用户会话无效,也可以是无状态的,但不能两者兼而有之。

“不安全”是一个强有力的声明,但默认情况下它们不会缓解某些威胁。

JWT 在不了解风险和限制的情况下被过度使用。JWT 的一种用途是单点登录场景,但实际上并没有很多人需要它。另一种用途是真正的无状态应用程序,但这些都有风险。JWT 有一些用途,它们并非无用,但它们的使用量往往超出应有的范围。

如果您需要服务器端会话失效(强制注销),您的解决方案将不是无状态的。如果你想要无状态,JWT 很棒,但你必须接受它们的风险和限制。如果您有一个身份提供者的 sso,该身份提供者发布您的应用程序用来验证用户的令牌,那么 JWT 是通过 OpenID Connect 实现这一目标的标准方法。如果您想说将有限的、有时间限制的会话传递给 Web 应用程序以外的其他东西,那么 JWT 可能会派上用场。在用户登录同一域并仅查看页面或使用同一来源的 api 的普通 Web 应用程序中,普通的旧会话 id 更安全。

简而言之,您需要为工作选择正确的工具。有时它是 JWT,但有时不是。


推荐阅读