Appendix F. Detached Content (分离内容)
在某些情况下, 可能希望完整性保护内容不包含在 JWS 表示中, 而是单独传输. 这种用例称为 "detached content" (分离内容). 要使用分离内容创建或验证 JWS:
创建分离内容 JWS
要创建具有分离内容的 JWS:
- 按照第 5.1 节中的步骤创建 JWS
- 在序列化输出中, 将 JWS Payload 的 base64url 编码表示替换为空字符串
JWS Compact Serialization 格式:
BASE64URL(UTF8(JWS Protected Header)) || '.' || '' || '.' || BASE64URL(JWS Signature)
注意中间的空字符串, 表示分离的载荷.
示例 (使用分离内容):
eyJhbGciOiJIUzI1NiJ9..dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
注意两个连续的句点字符, 表示载荷已被移除.
验证分离内容 JWS
要验证具有分离内容的 JWS:
- 从应用程序上下文获取分离的载荷内容
- 计算载荷的 base64url 编码
- 将编码的载荷插入到 JWS 表示中空载荷的位置
- 按照第 5.2 节中的步骤验证 JWS
使用场景
分离内容在以下场景中很有用:
- 大型载荷: 当载荷非常大时, 可能希望单独传输它
- 多个签名: 当同一载荷需要多个签名时, 可以避免重复传输载荷
- 已有内容: 当内容已经通过其他方式可用时, 只需传输签名
- 带宽优化: 在带宽受限的环境中, 可以减少传输的数据量
安全注意事项
使用分离内容时:
- 应用程序必须确保接收方可以可靠地获取正确的载荷内容
- 必须防止载荷替换攻击
- 应该使用额外的机制 (如内容哈希) 来绑定签名和载荷
- 应该在应用程序协议中明确定义如何关联签名和载荷