RFC 7515 - 附录 (Appendices)
本文档包含 RFC 7515 JSON Web Signature (JWS) 规范的附录部分.
Appendix A. JWS 示例 (JWS Examples)
本附录提供了使用不同算法的 JWS 完整示例. 详细内容位于 Appendix A.
A.1 使用 HMAC SHA-256 的 JWS 示例 (Example JWS Using HMAC SHA-256)
使用 HMAC SHA-256 算法的完整 JWS 示例, 包括编码和验证步骤.
A.2 使用 RSASSA-PKCS1-v1_5 SHA-256 的 JWS 示例 (Example JWS Using RSASSA-PKCS1-v1_5 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)
使用椭圆曲线数字签名算法 ECDSA P-256 SHA-256 的示例.
A.4 使用 ECDSA P-521 SHA-512 的 JWS 示例 (Example JWS Using ECDSA P-521 SHA-512)
使用更高安全级别的 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)
使用通用 JWS JSON Serialization 格式的示例, 展示多个签名的能力.
A.7 使用 Flattened JWS JSON Serialization 的 JWS 示例 (Example JWS Using Flattened JWS JSON Serialization)
使用扁平化 JWS JSON Serialization 格式的示例.
Appendix B. "x5c" (X.509 证书链) 示例 ("x5c" (X.509 Certificate Chain) Example)
X.509 证书链示例, 展示如何在 JWS Header 中使用 x5c 参数. 详细内容位于 Appendix B.
本附录提供了一个完整的 X.509 证书链 JSON 数组示例, 可作为 x5c (X.509 certificate chain) Header Parameter 的值使用.
Appendix C. 实现无填充 base64url 编码的说明 (Notes on Implementing base64url Encoding without Padding)
关于实现无填充 base64url 编码的注意事项. 详细内容位于 Appendix C.
Key Points (要点)
- 说明如何基于标准的带填充 base64 编码函数实现无填充的 base64url 编码
- 提供 C# 代码示例, 展示编码和解码实现
- 解释填充字符的计算规则
填充规则 (Padding Rules):
- 长度 mod 4 = 0: 无需填充
- 长度 mod 4 = 2: 添加两个
= - 长度 mod 4 = 3: 添加一个
= - 长度 mod 4 = 1: 格式错误
Appendix D. 密钥选择说明 (Notes on Key Selection)
密钥选择的注意事项. 详细内容位于 Appendix D.
Key Selection Algorithm (密钥选择算法)
本附录描述了一组用于选择密钥的可能算法, 这些密钥用于:
- 验证 JWS 的数字签名或 MAC
- 解密 JWE
密钥选择步骤:
-
收集潜在适用的密钥集
- 应用协议提供的密钥
- 通过
jku(JWK Set URL) 头参数引用的密钥 - 通过
jwk(JSON Web Key) 头参数提供的密钥 - 通过
x5u(X.509 URL) 头参数引用的密钥 - 通过
x5c(X.509 certificate chain) 头参数提供的密钥 - 应用可用的其他密钥
-
过滤收集的密钥集
- 根据
kid(key ID) 或x5t(X.509 thumbprint) 参数过滤 - 检查 JWK 的
alg(算法),use(公钥用途) 或key_ops(密钥操作) 参数 - 应用特定的过滤规则
- 根据
-
对收集的密钥集排序
- 优先尝试通过
kid或x5t引用的密钥 - 根据特定成员值排序
- 优先尝试通过
-
对密钥做出信任决策
- 评估密钥来源
- 验证 TLS 证书
- 检查 X.509 证书链的有效性
-
尝试签名/MAC 验证或解密
- 使用收集, 过滤和/或排序的密钥
- 可能限制尝试的密钥数量
- 成功验证或解密后终止
Appendix E. "crit" Header Parameter 的反面测试用例 (Negative Test Case for "crit" Header Parameter)
crit Header Parameter 的反面测试用例. 详细内容位于 Appendix E.
Purpose (目的)
演示符合规范的实现必须拒绝包含不理解的关键扩展的输入.
Test Case (测试用例)
以下 JWS 必须被所有实现拒绝, 因为它使用了扩展 Header Parameter 名称 http://example.invalid/UNDEFINED, 而实现不理解该参数.
JWS Protected Header:
{
"alg":"none",
"crit":["http://example.invalid/UNDEFINED"],
"http://example.invalid/UNDEFINED":true
}
完整 JWS (Complete JWS, 必须被拒绝):
eyJhbGciOiJub25lIiwNCiAiY3JpdCI6WyJodHRwOi8vZXhhbXBsZS5jb20vVU5ERU
ZJTkVEIl0sDQogImh0dHA6Ly9leGFtcGxlLmNvbS9VTkRFRklORUQiOnRydWUNCn0.
RkFJTA.
Appendix F. 分离内容 (Detached Content)
分离内容. 详细内容位于 Appendix F.
Concept (概念)
在某些情况下, 对不包含在 JWS 中的内容进行完整性保护很有用.
Method (方法)
- 使用内容的表示作为载荷创建 JWS
- 从 JWS 中删除载荷表示
- 将修改后的对象发送给接收方
对于 JWS Compact Serialization:
- 用空字符串替换第二个字段 (包含
BASE64URL(JWS Payload))
对于 JWS JSON Serialization:
- 删除
payload成员
Reconstruction (重构)
接收方通过将载荷表示重新插入修改后的对象来重构 JWS, 然后以通常方式使用生成的 JWS.
Implementation Note (实现注意事项)
此方法无需 JWS 库提供特殊支持, 应用程序可以通过修改标准 JWS 库的输入和输出来使用此方法.
致谢 (Acknowledgements)
JSON 内容签名的解决方案此前已由 Magic Signatures, JSON Simple Sign 和 Canvas Applications 等项目探索, 这些项目都影响了本文档.
感谢 Axel Nennker 在 JWS 和 JWE 规范上的早期实现和反馈.
本规范是 JOSE 工作组的成果, 包括数十位活跃且投入的参与者. 特别是以下个人贡献了影响本规范的想法, 反馈和措辞:
Dirk Balfanz, Richard Barnes, Brian Campbell, Alissa Cooper, Breno de Medeiros, Stephen Farrell, Yaron Y. Goland, Dick Hardt, Joe Hildebrand, Jeff Hodges, Russ Housley, Edmund Jay, Tero Kivinen, Ben Laurie, Ted Lemon, James Manger, Matt Miller, Kathleen Moriarty, Tony Nadalin, Hideki Nara, Axel Nennker, John Panzer, Ray Polk, Emmanuel Raviart, Eric Rescorla, Pete Resnick, Jim Schaad, Paul Tarjan, Hannes Tschofenig, Sean Turner.
Jim Schaad 和 Karen O'Donoghue 担任 JOSE 工作组主席, Sean Turner, Stephen Farrell 和 Kathleen Moriarty 在本规范创建期间担任安全领域主管.
作者地址 (Authors' Addresses)
Michael B. Jones
Microsoft
Email: [email protected]
URI: http://self-issued.info/
John Bradley
Ping Identity
Email: [email protected]
URI: http://www.thread-safe.com/
Nat Sakimura
Nomura Research Institute
Email: [email protected]
URI: http://nat.sakimura.org/