Skip to main content

Appendix F. Detached Content (分离内容)

在某些情况下, 可能希望完整性保护内容不包含在 JWS 表示中, 而是单独传输. 这种用例称为 "detached content" (分离内容). 要使用分离内容创建或验证 JWS:

创建分离内容 JWS

要创建具有分离内容的 JWS:

  1. 按照第 5.1 节中的步骤创建 JWS
  2. 在序列化输出中, 将 JWS Payload 的 base64url 编码表示替换为空字符串

JWS Compact Serialization 格式:

BASE64URL(UTF8(JWS Protected Header)) || '.' || '' || '.' || BASE64URL(JWS Signature)

注意中间的空字符串, 表示分离的载荷.

示例 (使用分离内容):

eyJhbGciOiJIUzI1NiJ9..dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

注意两个连续的句点字符, 表示载荷已被移除.

验证分离内容 JWS

要验证具有分离内容的 JWS:

  1. 从应用程序上下文获取分离的载荷内容
  2. 计算载荷的 base64url 编码
  3. 将编码的载荷插入到 JWS 表示中空载荷的位置
  4. 按照第 5.2 节中的步骤验证 JWS

使用场景

分离内容在以下场景中很有用:

  • 大型载荷: 当载荷非常大时, 可能希望单独传输它
  • 多个签名: 当同一载荷需要多个签名时, 可以避免重复传输载荷
  • 已有内容: 当内容已经通过其他方式可用时, 只需传输签名
  • 带宽优化: 在带宽受限的环境中, 可以减少传输的数据量

安全注意事项

使用分离内容时:

  • 应用程序必须确保接收方可以可靠地获取正确的载荷内容
  • 必须防止载荷替换攻击
  • 应该使用额外的机制 (如内容哈希) 来绑定签名和载荷
  • 应该在应用程序协议中明确定义如何关联签名和载荷