签名输入为 ASCII(base64url(protected header) ‖ "." ‖ base64url(payload)),签名或 MAC 恰好在这些字节上计算,因此对头部或载荷重新编码会使其失效。紧凑序列化(§3.1、§7.1)携带一个签名和受保护头部;JSON 序列化(§7.2)允许多个签名和未受保护的头部成员。
头部参数(§4.1):alg(必需)、kid、typ、cty、crit,以及携带密钥的成员 jwk、jku、x5c、x5u、x5t 和 x5t#S256——绝不能仅凭这些成员来选择验证密钥。RFC 7797 增加了用于未编码载荷的 b64: false,Open Banking 的 x-jws-signature 头部等分离式签名会用到它。
你遇到的 JWT 几乎都是 JWS;ACME 请求、DPoP 证明、SD-JWT 的颁发者签名以及许多 webhook 签名也都是 JWS。