Входные данные подписи — 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 для незакодированной полезной нагрузки; этот параметр используют отсоединённые подписи, например в заголовке x-jws-signature в Open Banking.
Почти любой JWT, который вам встретится, оказывается JWS; запросы ACME, доказательства DPoP, подписи издателя SD-JWT и многие подписи вебхуков тоже представляют собой JWS.