【问题标题】:Invalidating Jwt Token without a blacklist在没有黑名单的情况下使 Jwt 令牌无效
【发布时间】:2022-01-20 17:58:21
【问题描述】:

我想使刷新 jwt 令牌在不使用轮换的情况下维护已用刷新令牌的黑名单,为此我想在每当检测到 2 个刷新令牌正在以不同的轮换数使用时,服务器生成并存储的 RT(例如,普通用户从他的最后一个请求中获得的 RT2 和恶意用户在使用旧 RT2 发送恶意请求后生成的 RT3 )。

一旦服务器发现一个 RT2 正在使用,而最新的一个是 RT3。服务器应该“无效”之前的令牌,并在用户使用他的密码重新连接时发出一个新的RT。令牌无效的过程只是改变新生成的令牌中的ValidationCode,并接受任何令牌有效的请求 + 有效负载中的验证码与该用户存储在服务器中的验证码相匹配。

如果使用这种方法,如果恶意用户再次尝试使用 RT3,即使 jwt 令牌有效,ValidationCode 现在已更改,它将与服务器中的不匹配,但新生成的令牌会。

这种方法是否安全且足以取代将旧令牌列入黑名单?我认为这违背了最初使用 jwt 的目的 + 浪费时间和内存来存储列表和在数据库中查询

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: oauth-2.0 jwt authorization access-token refresh-token


【解决方案1】:

您在此处描述的是一种解决方案,您可以将用户使用的最新 RT 保留在数据库中,并仅允许刷新请求将 RT 保存在数据库中。这是一种有效的方法,但它有一个缺点:您只能为用户拥有一对活动的 AT/RT。如果这对您来说没问题,那么您可以使用此解决方案。

浪费时间和内存存储列表和在数据库中查询

无论哪种方式,您都必须查询数据库,因此不会有太大变化。你得到的是一点存储空间。

【讨论】:

  • 我明白谢谢,但我没有得到的是“只有一对有效的 AT/RT 供用户使用”,如果我在有效负载中包含附加信息,例如设备名称,我可以如果同一用户需要从多个地方登录,则为同一用户生成多个 AT/RT,并且如果旧的 AT/RT 独立于该设备名称使用,则所有令牌都将通过更改 ValidationCode 被撤销不可行?
  • 是的。如果您使用您描述的验证码,您可能能够为同一用户发出多个 AT。如果你要保存 RT 而不是验证码,那将是不可能的。
猜你喜欢
  • 2019-02-23
  • 2022-01-17
  • 2015-10-02
  • 2019-10-31
  • 2021-04-16
  • 2019-09-23
  • 2020-01-22
  • 2019-05-22
  • 2017-05-30
相关资源
最近更新 更多