开发者工具 · JWT 解码器
七项注册 JWT 声明:iss、sub、aud、exp、nbf、iat 和 jti
· 背景
jwt 数据格式 身份验证
RFC 7519 保留七个具有定义含义和类型的声明名称。这篇文章解释了每一种类型、它们背后的 StringOrURI 和 NumericDate 类型,以及注册、公共和私人声明如何共存。
我应该使用哪些声明名称? — 注册机构回答的设计问题
选择声明名称部分是互操作性决策。重复使用已注册的名称可以为读者和图书馆提供既定的含义,而特定于应用程序的名称则需要本地文档。 ToolAcre 可识别其描述表中的七个核心名称,并使其他声明可见,而无需分配语义。
熟悉的名字并不自动值得信赖。解码器读取令牌包含的任何对象,但从不验证其签名。注册词汇可以帮助人类对数据进行分类;只有受信任的验证者才能确定发行者提供了受保护的值。
iss 和 sub 显示为字符串;此实现不强制 StringOrURI 语法
`iss` 标识令牌声明的颁发者, `sub` 标识它的对象是谁或什么。 ToolAcre 描述这两者并显示它们的值,但其实现不会验证 StringOrURI 语法或将任一字段与服务配置进行比较。
验证者应将预期的发行者绑定到受信任的密钥材料,并在该发行者的命名空间下解释主题。将已知的发行者字符串复制到伪造的有效负载中,使解码器看起来令人信服,而无需确定来源。仅在加密验证后才使用这些字段。
aud — 预期接收者,作为字符串或数组
`aud` 描述了预期的接收者,并且可以根据适用的令牌规则表示为一个值或一个列表。 ToolAcre 的通用声明表将数组保留为 JSON 文本,但不决定当前服务是否出现在其中。
受众是上下文相关的。相同的经过身份验证的令牌可能适用于一个 API,但不适用于另一个 API。资源服务器需要可信配置中的预期标识符,并且必须拒绝不匹配,而不是让令牌定义应该接受的位置。
exp、nbf 和 iat — 及时绑定令牌的三个 NumericDate 声明
`exp`、`nbf` 和 `iat` 是 NumericDate 声明。 ToolAcre 将有限数字视为自纪元以来的秒数,乘以 1,000 以显示日期,并标记相对于浏览器时钟的到期或不早于日期。它不定义回旋余地或强制服务器接受。
到期标志着声明的结束边界,而不是令牌曾经有效的证明。 Not-before 标记声明的开始边界,issued-at 记录声明的创建时间。每个都可以在有效负载中伪造,因此时间算术必须遵循可信流程中的签名验证。
jti — 用于重播检测和拒绝列表的唯一标识符
`jti` 是令牌标识符。系统可以使用经过身份验证的、适当生成的标识符来进行重播跟踪或撤销状态,但单独的声明不提供任何属性。 ToolAcre 将其描述为用于重放检测的令牌 ID,并显示其准确值。
唯一性、存储和查找行为属于发行者和验证者架构。解码器无法确定另一个令牌是否重用了该标识符,或者拒绝列表是否包含该标识符。将其视为候选相关值,直到周围的可信系统提供证据。
ToolAcre 显示中的注册描述和特定于应用程序的声明
该实现仅通过解释性文本来区分注册名称。每个负载属性仍然由 `listClaims` 返回;未知名称收到空描述,并且 UI 将其标记为特定于应用程序。它不咨询公共注册表或防止私有名称冲突。
该边界避免声明超出来源证明的内容。当互操作性很重要时,团队应该记录他们的私人声明并选择抗冲突的名称。解码器缺少描述意味着“不在这个本地七名表中”,而不是“无效”或“可以安全忽略”。
工作示例 — 读取实际有效负载并对每个声明进行分类
考虑 `{"iss":"https://issuer.example","sub":"user-7","aud":["orders"],"exp":1717246800,"nbf":1717243100,"iat":1717243200,"jti":"demo-9","tenant":"north"}`。 ToolAcre 描述了七个注册字段和标签 `tenant` 应用程序特定的同时格式化三个数字时间。
此分类有助于审查有效负载设计。它不会验证 URL、主题、受众、日期、标识符或租户。伪造的令牌可以准确地复制该对象。仅将经过验证的声明送入授权逻辑,然后应用消费服务的预期值。
要点:在合适时使用注册名称 — ToolAcre JWT 解码器显示有效负载,以便您可以看到真正的发行者设置了哪些声明
当定义的含义合适时使用注册名称,因为可识别的词汇可以减少不必要的翻译。保持私有字段的记录和最小化。不要仅仅因为下游代码已经解析该密钥而重载 `sub`、`aud` 或具有不同本地含义的时间声明。
ToolAcre 可以显示安全令牌携带哪些名称以及其数字声明如何呈现。它不能证明任何价值。解码的有用结果是供审查的清单;核查和政策的有用结果是一项决定,但它们仍然是分开的。