【问题标题】:JSON Web Token expirationJSON Web 令牌过期
【发布时间】:2017-11-01 00:29:21
【问题描述】:

大多数 JWT(JSON Web 令牌)教程(例如:thisthis)都说,一旦验证,您可以使用传入的令牌获取客户端信息,而无需从数据库验证它。

我的问题是,无效用户的情况如何维持?我的意思是,假设客户刚刚获得了一个一周后到期的 JWT 令牌。但是出于非常具体的原因,假设我们决定使用户无效,并且不希望用户访问我们的 API。但是该用户仍然拥有有效的令牌,并且用户可以访问 API。

当然,如果我们为每个请求往返一次 DB,那么我们可以验证该帐户是有效还是无效。我的问题是,对于长期存在的令牌,处理这种情况的最佳方法是什么。

提前致谢。

【问题讨论】:

    标签: security spring-security oauth oauth-2.0 jwt


    【解决方案1】:

    RFC 7009 指定 OAuth 2.0 令牌撤销。基本上你有一个端点,你可以撤销 access_tokens。

    【讨论】:

    • 你可以有一个端点来撤销访问令牌,但我的问题是你怎么知道要撤销哪个访问令牌?因为我们没有往返 DB。
    【解决方案2】:

    从您的问题中不清楚您使用的是哪个 OAuth 流程,或者您是否指的是 OpenID Connect 而不是 Oauth。

    考虑使用刷新令牌并缩短访问令牌的到期时间 - 例如30 分钟。

    在这种情况下,用户 (resource owner) 不必继续进行身份验证,您的 API (Resource Server) 不必在每个请求中检查用户是否仍然有效。

    访问令牌过期后,您的 client(调用您的 API 的应用程序)应联系您的数据库 (Authorisation Server) 并将其刷新令牌交换为新的访问令牌 - 通常是新的刷新令牌 - 前提是用户仍然是您数据库上的有效用户,并且该用户尚未撤销客户端应用程序对其 API 上的数据的访问权限。

    如果您的授权服务器允许,您也可以按照另一个答案中的建议使用令牌撤销,但我会尝试刷新令牌和短期访问令牌,因为它更容易实现并且不会通过用户身份验证/授权污染您的 API顾虑 - 这项工作最好由 Auth Server 完成。

    【讨论】:

    • iandayman:关于它使用的 OAuth 流程,您可以在 JWT 规范中找到它(主帖中给出的链接)。我想知道的是,它在现实生活中是如何解决的。我的意思是从 FB 我得到一个有效期为一年的令牌。现在,如果我的帐户在一周后被删除,那么令牌不应该在一年内有效。我的问题是,如何在不往返 DB 的情况下进行此检查(如果用户存在或有效)?
    【解决方案3】:

    这是您使用 JWT 时的主要问题。因此,在这种情况下,基本上最好的方法是在您的网关上创建黑名单。从安全的角度来看,这不是最佳解决方案,但只有在您使用 JWT 时这才是好的解决方案。

    【讨论】:

      【解决方案4】:

      如果不是不可能的话,也很难撤销基于 JWT 的访问令牌。

      应该如何表示访问令牌?主要有两种方式。

      1. 作为无意义的随机字符串。与访问令牌相关的信息存储在授权服务器后面的数据库表中。
      2. 作为一个自包含的字符串,它是通过 base64url 或类似的东西对访问令牌信息进行编码的结果。

      在这些方式之间进行选择将导致如下表所述的差异。

      有关访问令牌表示方式的优缺点,请参阅 "Full-Scratch Implementor of OAuth and OpenID Connect Talks About Findings" 中的“7. Access Token”

      如果您的访问令牌基于 JWT,您的系统必须(1) 记住已撤销的访问令牌,直到它们过期。另一个折衷方案是(2) 使访问令牌的生命周期足够短并放弃撤销它们

      就个人而言,经过考虑,我在实现授权服务器 (Authlete) 时没有选择 JWT 作为访问令牌表示,因为一旦发布基于 JWT 的访问令牌就很难/不可能撤销和更新。

      【讨论】:

        猜你喜欢
        • 2014-06-30
        • 2017-04-26
        • 1970-01-01
        • 2021-03-01
        • 2019-08-05
        • 2016-08-01
        • 2015-06-22
        • 2016-02-07
        • 2016-03-23
        相关资源
        最近更新 更多