在 JWT(JSON Web Token)体系中,json.sign(或 jws.Sign)和 json.verify(或 jws.Verify)其实就是对“头部+载荷”做数字签名和验证的过程,整个流程并不涉及加密,只是保证数据未被篡改和可验证签发者身份。

原理概述

  1. JWS(JSON Web Signature)

    JWT 实际上是一种 JWS:

    JWT = Base64UrlEncode(header).Base64UrlEncode(payload).Base64UrlEncode(signature)
    
  2. 没有加密

签名过程 (json.sign)

  1. 构造 Header

    {
      "alg": "HS256",    // 或 RS256、ES256 等
      "typ": "JWT"
    }
    
  2. 构造 Payload

    你的业务数据,比如:

    {
      "sub": "1234567890",
      "name": "Merrick",
      "iat": 1620000000
    }
    
  3. Base64Url 编码

    对 Header 和 Payload 分别做 Base64Url 编码,得到两段字符串:

    encodedHeader = base64url(headerJSON)
    encodedPayload = base64url(payloadJSON)
    
  4. 生成签名输入

    signingInput = encodedHeader + "." + encodedPayload
    
  5. 计算签名

  6. Base64Url 编码签名

    signature = base64url( rawSignatureBytes )
    
  7. 拼接成最终 JWT

    jwt = encodedHeader + "." + encodedPayload + "." + signature
    

验证过程 (json.verify)

  1. 分割 Token

    将收到的 JWT 按 . 拆成三部分:A = encodedHeaderB = encodedPayloadC = signature

  2. 重建签名输入

    signingInput = A + "." + B
    
  3. Base64Url 解码签名

    rawSignature = base64url_decode(C)
    
  4. 计算对比签名

  5. 验证成功后

为什么没有加密