【问题标题】:JWT - per user signing keyJWT - 每个用户的签名密钥
【发布时间】:2018-01-09 01:45:20
【问题描述】:

在我的项目中,需要在用户更改密码时使用户的所有 jwt 令牌无效。我正在考虑给每个用户一个不同的签名密钥,并在更改密码时简单地重置密钥。然后我四处搜索,发现 Redis 是存储每个用户密钥的好地方。一切似乎都很好。

但有一件事我无法理解。由于每次请求都必须访问 Redis 一次,这与向用户发出不透明令牌而不是 JWT 并将令牌 -> JWT 有效负载映射存储在 Redis 中有何不同?这不是违背了使用 JWT 的目的吗?

【问题讨论】:

    标签: redis jwt


    【解决方案1】:

    要使令牌无效,您需要撤销它们。 OAuth 规范也不需要每次需要验证 JWT 时都从远程服务器获取密钥(正如您所说的那样,这有点违背了目的)。密钥可以本地存储在资源站点。 您有两种选择:

    1) 每次验证 JWT 令牌时,都会从资源端对 OAuth 服务器进行自省。对我来说似乎有点矫枉过正。最好的办法是给 JWT 令牌较短的过期时间,让已经发行的令牌刚好过期。

    2) 让资源在本地存储密钥,当验证失败时,获取密钥并再次重新验证。

    【讨论】:

      【解决方案2】:

      从使令牌失效的角度来看,没有特别需要将 JWT 存储在 Redis 中 - 任何您可以检查并随后失效的东西都可以解决问题。

      也就是说,您可能出于其他原因使用 JWT。例如,这是 AuthN/Identity 服务提供的。或者,也许您使用它来存储声明或您验证的其他元数据,作为 AuthN/AuthZ 逻辑的一部分。这种情况下,既然方便,存储 JWT 就显得很合理了。

      【讨论】:

        猜你喜欢
        • 2018-12-21
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        • 2014-10-14
        • 2019-05-09
        • 1970-01-01
        • 2018-11-20
        相关资源
        最近更新 更多