JWT jti 唯一性

Posted

技术标签:

【中文标题】JWT jti 唯一性【英文标题】:JWT jti uniqueness 【发布时间】:2017-08-18 19:00:20 【问题描述】:

我在理解如何在 JWT 中使用 jti 声明时遇到了一些麻烦。据我在其他 SO 问题和在线文档中看到的,想法是它们应该是独一无二的,但在什么范围内是独一无二的?每个站点/应用程序一个 jti?每个令牌/用户一个 jti?而且,如果我有一个特定于用户的 jti,那是否会取消 JWT 无状态的点,因为我需要以某种方式跟踪令牌?

我很想得到一些帮助来了解如何使用 jti,或者我可能根本不需要它。

【问题讨论】:

【参考方案1】:

jti应用范围内应该是唯一的,以防止两个相等的 JWT。

见RFC 7519

4.1.7。 “jti”(JWT ID)声明

“jti”(JWT ID)声明为 JWT 提供了唯一标识符。 标识符值的分配方式必须确保 相同值的概率可以忽略不计 意外分配给不同的数据对象;如果申请 使用多个发行者,必须防止值之间的冲突 也由不同的发行人制作。可以使用“jti”声明 以防止 JWT 被重放。 “jti”值是一个案例- 敏感字符串。使用此声明是可选的。

如果您需要一个黑名单来撤销令牌并确保相同的 JWT 不会被两次发布(当包含相同的内容而没有时间戳声明时),这可能会很有用

【讨论】:

我认为“相同的 JWT 不会发布两次”是让我失望的原因。在同一个应用程序中,同一个用户将获得相同的令牌,除非时间戳发生变化(我也不确定重新发布令牌的频率;在每个页面加载似乎都过大),但这是一个完全不同的问题。

以上是关于JWT jti 唯一性的主要内容,如果未能解决你的问题,请参考以下文章

jti 声明应该多久重新生成一次?

为 flask-jwt-extended 获取其他用户 jti

在 javascript 中为 JWT 生成 JTI 声明

标识jti,然后判断该标识是否存在黑名单列表

Auth0 JWT 中的“Sub”声明是不是总是唯一的?

JWT认证方案与禁用令牌策略