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.