跳到主要内容

Appendix A. JWT 示例 (JWT Examples)

本附录提供 JWT 示例.

A.1. 加密 JWT 示例 (Example Encrypted JWT)​

本节提供一个加密 JWT 示例. 该加密 JWT 使用 JWE 紧凑序列化.

下面的 JOSE 头部示例声明:

  • 被编码对象是 JWT
  • JWT 已加密
  • 内容加密密钥 (Content Encryption Key, CEK) 使用 RSA-OAEP 算法加密
  • JWT 声明集使用 AES GCM 算法加密
{"alg":"RSA-OAEP","enc":"A256GCM"}

下面是该加密 JWT 的 JWT 声明集示例:

{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}

JWE 紧凑序列化格式为:

BASE64URL(UTF8(JWE Protected Header)) || '.' ||
BASE64URL(JWE Encrypted Key) || '.' ||
BASE64URL(JWE Initialization Vector) || '.' ||
BASE64URL(JWE Ciphertext) || '.' ||
BASE64URL(JWE Authentication Tag)

A.2. 嵌套 JWT 示例 (Example Nested JWT)​

本节提供一个嵌套 JWT 示例, 展示嵌套签名和加密. 在此示例中, 先对 JWT 声明集进行签名, 然后加密所得 JWS.

第一步, 创建包含声明的 JWT 声明集并对其签名, 从而创建 JWS. 第二步, 将该 JWS 用作 JWE 的明文并进行加密.

内部 JWT (JWS) 的 JOSE 头部:

{"alg":"RS256"}

外部 JWT (JWE) 的 JOSE 头部包含值为 "JWT" 的 "cty" (content type), 表明其中承载的是嵌套 JWT:

{"alg":"RSA-OAEP","enc":"A256GCM","cty":"JWT"}

JWT 声明集与前一个示例相同. 得到的嵌套 JWT 是先签名后加密的 JWT.