JSON Web 加密(JWE)

JSON Web 加密(JWE)使用基于 JavaScript Object Notation(JSON) 的数据结构表示加密内容。它定义了一种加密索赔数据的方法,以便只有预期的接收者才能读取令牌中的信息。

在 JWE JSON 序列化中,JWE 表示为包含以下八个成员中的一些或全部的 JSON 对象:

  "protected", with the value BASE64URL(UTF8(JWE Protected Header))
  "unprotected", with the value JWE Shared Unprotected Header
  "header", with the value JWE Per-Recipient Unprotected Header
  "encrypted_key", with the value BASE64URL(JWE Encrypted Key)
  "iv", with the value BASE64URL(JWE Initialization Vector)
  "ciphertext", with the value BASE64URL(JWE Ciphertext)
  "tag", with the value BASE64URL(JWE Authentication Tag)
  "aad", with the value BASE64URL(JWE AAD)

六个 base64url 编码的结果字符串和两个不受保护的 JSON 对象值表示为 JSON 对象中的成员。

示例 JWE

以下示例 JWE Header 声明:

  • 使用 RSA-PKCS1_1.5 算法将内容加密密钥加密到收件人以生成 JWE 加密密钥
  • 使用 AES-256-GCM 算法对明文进行加密,以生成 JWE 密文
  • 使用了具有 base64url 编码__79_Pv6-fg 的指定 64 位初始化向量
  • 与用于加密 JWE 的密钥对应的 X.509 证书的指纹具有 base64url 编码 7noOPq-hJ1_hCnvWh6IeYI2w9Q0。
{
 "alg":"RSA1_5",
 "enc":"A256GCM",
 "iv":"__79_Pv6-fg",
 "x5t":"7noOPq-hJ1_hCnvWh6IeYI2w9Q0"
}

Base64url 编码 JWE 标头的 UTF-8 表示的字节产生此编码的 JWE 标头值(带有换行符仅用于显示目的):

eyJhbGciOiJSU0ExXzUiLA0KICJlbmMiOiJBMjU2R0NNIiwNCiAiaXYiOiJfXzc5
X1B2Ni1mZyIsDQogIng1dCI6Ijdub09QcS1oSjFfaENudldoNkllWUkydzlRMCJ

有关更多信息,请阅读 JSON Web 加密规范(RFC 7516)