security - JSON Web token 过期

标签 security spring-security oauth oauth-2.0 jwt

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

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

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

提前致谢。

最佳答案

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

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

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

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

    enter image description here

    有关访问 token 表示方式的优缺点,请参见“Full-Scratch Implementor of OAuth and OpenID Connect Talks About Findings”中的“7.访问 token ”。

    如果您的访问 token 是基于 JWT 的,您的系统必须 (1) 记住已撤销的访问 token ,直到它们过期 .另一个妥协是 (2) 使访问 token 的生命周期足够短并放弃撤销它们 .

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

    关于security - JSON Web token 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44280736/

    相关文章:

    php - 三元运算符变量和mysql?

    ajax - 使用 Apache 将 CORS 列入白名单

    java - Java 和 Go 中不同的 CRC32 值

    django - HTTPError at/social-auth/login/twitter/403

    java - 授权用户使用 ITIM 中分配的组

    java - 如何创建一个可以采用属性值模式的 LdapUserDetailsMapper?

    spring 安全、方法安全和 url 安全

    Laravel Passport 无效的刷新 token - token 未链接到客户端

    node.js - Garmin API 中的 oAuth header 错误

    java - 有没有办法访问@Secured中指定的角色?