JSON Web令牌到期

Jah*_*hel 16 security oauth spring-security oauth-2.0 jwt

在大多数JWT(JSON Web Token)教程(例如:this and this)中,一旦经过验证,您可以使用传入令牌获取客户端信息,而无需从DB验证它.

我的问题是,如何维护无效的用户情况呢?我的意思是,假设一个客户端只有一个JWT令牌,它在一周内到期.但由于非常具体的原因,我们可以说我们决定使用户无效,并且不希望用户访问我们的API.但该用户仍然有一个有效的令牌,用户可以访问该API.

当然,如果我们为每个请求进行数据库往返,那么我们可以验证该帐户是有效还是无效.我的问题是,对于长寿代币来说,处理这种情况的最佳方法是什么.

提前致谢.

Tak*_*aki 6

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

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

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

在这些方式之间进行选择将导致后续差异,如下表所述.

在此输入图像描述

请参见"7.访问令牌"" 的OAuth和OpenID连接六方会谈的全划痕实施者关于发现 "为访问令牌表示的方式利弊.

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

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


mor*_*tzg 0

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