【问题标题】:JWT seems to be not secure? Isn't it?JWT 好像不安全?不是吗?
【发布时间】:2020-10-16 08:12:54
【问题描述】:

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

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

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

【问题讨论】:

  • 我会在 info sec stack exchange 上问这个
  • 我非常不同意,我认为与开发如此接近的安全主题应该保留在这里,以鼓励开发人员进行安全思考。安全不仅仅是象牙塔里的人,而是为所有人解决的。安全开发在很大程度上是开发人员的工作。

标签: rest security jwt


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2017-06-30
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2017-12-26
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多