撤销刷新令牌

时间:2021-07-16 06:14:42

标签: jwt refresh-token

我目前正在构建一个使用 asp.net 和 microsoft jwt 库发布 jwt 令牌和刷新令牌的安全服务。我的问题是,我有来自存储在 db 中的用户的刷新令牌:

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

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

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