跳到主要内容

5. JOSE 头部 (JOSE Header)

对于 JWT 对象, JOSE 头部所表示的 JSON 对象成员描述应用于该 JWT 的密码学操作, 并且可选地描述 JWT 的其他属性. 根据 JWT 是 JWS 还是 JWE, 相应的 JOSE 头部值规则适用.

本规范进一步规定以下头部参数在 JWT 为 JWS 和 JWT 为 JWE 两种情况下的使用.

5.1. "typ" (Type) 头部参数​

[JWS] 和 [JWE] 定义的 "typ" (type) 头部参数由 JWT 应用用于声明这个完整 JWT 的媒体类型 [IANA.MediaTypes]. 当可包含 JWT 对象的应用数据结构中也可能出现非 JWT 值时, 该参数供 JWT 应用使用; 应用可以用此值区分可能出现的不同对象类型. 当对象类型已经已知时, 应用通常不会使用该参数. JWT 实现会忽略此参数; 对该参数的任何处理均由 JWT 应用执行. 如果该参数存在, 推荐其值为 "JWT", 以表明该对象是 JWT (RECOMMENDED). 虽然媒体类型名称不区分大小写, 但为兼容旧实现, 推荐始终使用大写字符拼写 "JWT" (RECOMMENDED). 使用此头部参数是可选的 (OPTIONAL).

5.2. "cty" (Content Type) 头部参数​

[JWS] 和 [JWE] 定义的 "cty" (content type) 头部参数在本规范中用于传达 JWT 的结构信息.

在未使用嵌套签名或加密操作的普通情况下, 不推荐使用此头部参数 (NOT RECOMMENDED). 如果使用了嵌套签名或加密, 则此头部参数必须存在 (MUST); 在这种情况下, 其值必须为 "JWT", 以表明该 JWT 中承载的是嵌套 JWT (MUST). 虽然媒体类型名称不区分大小写, 但为兼容旧实现, 推荐始终使用大写字符拼写 "JWT" (RECOMMENDED). 嵌套 JWT 示例请参见 Appendix A.2.

5.3. 将声明复制为头部参数 (Replicating Claims as Header Parameters)​

在某些应用中, 让处理 JWT 的软件直接看到某些声明是有用的, 而不必先解密或验证 JWT. 这可以通过将声明值复制为头部参数值来实现.

本规范既不要求也不禁止在头部参数中复制声明. 但是, 选择这样做的应用必须遵循以下规则 (MUST):

  1. 无论声明位于 JWT 声明集中还是作为头部参数存在, 都必须保留该声明的存在性和值语义 (MUST).

  2. 如果相同信息同时出现在两个位置, 它们的值必须相同 (MUST). 实现必须验证这种一致性, 如果不一致则拒绝该 JWT (MUST).