【问题标题】:Revoke refresh token撤销刷新令牌
【发布时间】:2021-09-24 23:28:44
【问题描述】:

我目前正在构建一个使用 asp.net 和 microsoft jwt 库发布 jwt 令牌和刷新令牌的安全服务。我的问题是,我从存储在数据库中的用户那里获得了刷新令牌:

  1. 我应该在每次用户请求新访问令牌时使用当前刷新令牌替换刷新令牌,还是只标记已撤销的刷新令牌或某种标志?
  2. 当有撤销令牌的请求时,我应该删除还是标记它?

谢谢。

【问题讨论】:

  • 您打算如何删除 jwt 令牌?你也在建立一个 jwt 记录吗?
  • 好吧,我使用 jwt 作为访问令牌,生命周期短,前 30 分钟,在此期间我还生成随机令牌(称为刷新令牌)并将其存储在数据库中。实际上,我不打算删除 jwt 令牌,因为它无法删除:)。但我想知道如何处理刷新令牌。

标签: jwt refresh-token


【解决方案1】:

处理列入黑名单的 JWT 令牌的一种标准方法是维护不应再使用的令牌的黑名单缓存。您通常会设计设置,以便在任何给定时间黑名单缓存中的 JWT 数量都相对较小。由于缓存相当快(大约比数据库查找快 100 倍),因此检查每个传入请求的缓存并不是性能杀手。

传入 JWT 的工作流将被修改为:

  1. 检查传入 JWT 的声明(例如 exp)
  2. 检查校验和,确保客户端没有篡改 JWT
  3. 点击黑名单缓存,验证JWT没有被撤销
  4. 授予对服务器端系统的访问权限

关于整理黑名单缓存,一种常见的方法是为每个 JWT 分配到期时间。然后,当给定的访问或刷新令牌过期时,可以将其从缓存中删除。例如,Redis 支持使用过期时间自动删除陈旧的缓存条目。

【讨论】:

  • 我明白了。我什至不考虑这种方式,谢谢你的建议。但我还有一个问题是:我也可以使用 JWT 来刷新令牌吗?使用它有什么风险吗?
  • 访问和刷新令牌都是 JWT 令牌模式 (AFAIK) 的变体。除了到期和其他几个字段之外,它们的主要区别在于您如何使用它们。刷新令牌用于向服务器请求新的访问令牌。
  • 我明白了。谢谢你的建议
猜你喜欢
  • 2019-04-12
  • 2015-12-13
  • 2018-11-14
  • 2021-07-05
  • 2021-07-03
  • 2017-06-15
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多