5. JOSE Header (JOSE头部)
对于JWT对象,JOSE Header表示的JSON对象的成员描述了应用于JWT的加密操作,以及可选的JWT的其他属性。根据JWT是JWS还是JWE,适用JOSE Header值的相应规则。
本规范进一步规定了在JWT是JWS和JWT是JWE两种情况下使用以下头部参数 (Header Parameters)。
5.1. "typ" (Type) Header Parameter (类型头部参数)
[JWS] 和 [JWE] 定义的"typ" (type) 头部参数由JWT应用使用,用于声明此完整JWT的媒体类型 [IANA.MediaTypes]。这旨在供JWT应用在应用数据结构中可能包含JWT对象时使用,该数据结构中也可能存在非JWT的值; 应用可以使用此值来消除可能存在的不同类型对象之间的歧义。当已知对象是JWT时,应用通常不会使用它。JWT实现会忽略此参数; 对此参数的任何处理都由JWT应用执行。如果存在,推荐 (RECOMMENDED) 其值为"JWT",以指示此对象是JWT。虽然媒体类型名称不区分大小写,但推荐 (RECOMMENDED) 始终使用大写字符拼写"JWT",以与旧版实现兼容。此头部参数的使用是可选的 (OPTIONAL)。
5.2. "cty" (Content Type) Header Parameter (内容类型头部参数)
[JWS] 和 [JWE] 定义的"cty" (content type) 头部参数由本规范使用,用于传递关于JWT的结构信息。
在不使用嵌套签名或加密操作的正常情况下,不推荐 (NOT RECOMMENDED) 使用此头部参数。在使用嵌套签名或加密的情况下,此头部参数必须 (MUST) 存在; 在这种情况下,值必须 (MUST) 为"JWT",以指示此JWT中携带嵌套JWT (Nested JWT)。虽然媒体类型名称不区分大小写,但推荐 (RECOMMENDED) 始终使用大写字符拼写"JWT",以与旧版实现兼容。嵌套JWT的示例请参见附录A.2。
5.3. Replicating Claims as Header Parameters (将声明复制为头部参数)
在某些应用中,将声明的值复制为头部参数值可能很有用。这可以在JWS或JWE结构不包含有效载荷的表示中完成,从而允许在不处理完整JWT的情况下访问某些声明。
此规范不要求或禁止在头部参数中复制声明。但是,这样做的应用必须 (MUST) 遵循以下规则:
-
声明的存在性和值语义必须 (MUST) 保持不变,无论声明是在JWT声明集中还是作为头部参数存在。
-
如果JWT同时作为声明和头部参数存在相同的信息,则它们的值必须 (MUST) 一致。实现必须 (MUST) 验证此一致性,如果不一致则拒绝JWT。