跳到主要内容

Appendix A. JWS Examples

Appendix A. JWS 示例 (JWS Examples)

本附录提供了若干 JWS 示例. 前三个示例都表示 JSON Web Token (JWT) [JWT], 但载荷可以是任意八位字节序列, 如 Appendix A.4 所示.

A.1 使用 HMAC SHA-256 的 JWS 示例 (Example JWS Using HMAC SHA-256)

A.1.1 编码 (Encoding)

JWS Protected Header 声明该数据结构是 JWT, 并且 JWS Signing Input 使用 HMAC SHA-256 算法保护:

{"typ":"JWT",
"alg":"HS256"}

JWS Payload 为:

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

使用 JWS Compact Serialization 的完整 JWS 如下 (换行仅为便于显示):

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

A.1.2 验证 (Validating)

由于 "alg" Header Parameter 为 "HS256", 我们通过重复执行 HMAC 计算并比较结果, 来验证 JWS Signature 中包含的 HMAC SHA-256 值.

A.2 使用 RSASSA-PKCS1-v1_5 SHA-256 的 JWS 示例 (Example JWS Using RSASSA-PKCS1-v1_5 SHA-256)

A.2.1 编码 (Encoding)

本示例的 JWS Protected Header:

{"alg":"RS256"}

本示例使用 RSA 私钥进行签名. 完整的 JWS 表示按相同的编码过程生成.

A.2.2 验证 (Validating)

通过将公钥, JWS Signature 和 JWS Signing Input 传给配置为使用 SHA-256 的 RSA 签名验证器, 来验证 RSASSA-PKCS1-v1_5 SHA-256 数字签名.

A.3 使用 ECDSA P-256 SHA-256 的 JWS 示例 (Example JWS Using ECDSA P-256 SHA-256)

A.3.1 编码 (Encoding)

JWS Protected Header:

{"alg":"ES256"}

本示例使用椭圆曲线 (Elliptic Curve) P-256 密钥并结合 SHA-256 进行签名.

A.3.2 验证 (Validating)

使用 EC 公钥以及拆分为 R 和 S 分量的签名, 来验证 ECDSA P-256 SHA-256 数字签名.

A.4 使用 ECDSA P-521 SHA-512 的 JWS 示例 (Example JWS Using ECDSA P-521 SHA-512)

A.4.1 编码 (Encoding)

JWS Protected Header:

{"alg":"ES512"}

本示例的 JWS Payload 是 ASCII 字符串 "Payload".

A.4.2 验证 (Validating)

使用 P-521 曲线上的 EC 公钥来验证 ECDSA P-521 SHA-512 数字签名.

A.5 无安全保护的 JWS 示例 (Example Unsecured JWS)

这是一个没有完整性保护的 JWS 示例 (使用 "alg":"none"). 它只适用于载荷完整性已通过其他方式保护的情况.

A.6 使用 General JWS JSON Serialization 的 JWS 示例 (Example JWS Using General JWS JSON Serialization)

A.6.1 JWS 每个签名的 Protected Header (JWS Per-Signature Protected Headers)

A.6.2 JWS 每个签名的 Unprotected Header (JWS Per-Signature Unprotected Headers)

A.6.3 完整的 JOSE Header 值 (Complete JOSE Header Values)

A.6.4 完整的 JWS JSON Serialization 表示 (Complete JWS JSON Serialization Representation)

本示例演示带有多个签名的通用 JWS JSON Serialization 语法.

A.7 使用 Flattened JWS JSON Serialization 的 JWS 示例 (Example JWS Using Flattened JWS JSON Serialization)

本示例演示针对单签名场景优化的扁平化 JWS JSON Serialization 语法.


注: RFC 7515 官方文档包含所有示例的完整细节, 包括精确的八位字节序列, 密钥值以及逐步的编码/验证过程: https://www.rfc-editor.org/rfc/rfc7515.txt.