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):
-
无论声明位于 JWT 声明集中还是作为头部参数存在, 都必须保留该声明的存在性和值语义 (MUST).
-
如果相同信息同时出现在两个位置, 它们的值必须相同 (MUST). 实现必须验证这种一致性, 如果不一致则拒绝该 JWT (MUST).