Die Eingabe für die Signatur ist ASCII(base64url(protected header) ‖ "." ‖ base64url(payload)), und die Signatur oder der MAC wird über genau diese Bytes berechnet; wer Header oder Payload neu kodiert, macht sie daher ungültig. Die kompakte Serialisierung (§3.1, §7.1) trägt eine Signatur und einen geschützten Header; die JSON-Serialisierung (§7.2) erlaubt mehrere Signaturen und ungeschützte Header-Felder.
Header-Parameter (§4.1): alg (Pflicht), kid, typ, cty, crit sowie die schlüsseltragenden Felder jwk, jku, x5c, x5u, x5t und x5t#S256, denen die Auswahl eines Prüfschlüssels nie allein überlassen werden darf. RFC 7797 ergänzt b64: false für nicht kodierte Payloads; das nutzen abgetrennte Signaturen (Detached Signatures) wie der Header x-jws-signature von Open Banking.
Ein JWT, das dir begegnet, ist fast immer ein JWS; auch ACME-Anfragen, DPoP-Proofs, die Signaturen der SD-JWT-Aussteller und viele Webhook-Signaturen sind JWS.