A entrada da assinatura é ASCII(base64url(protected header) ‖ "." ‖ base64url(payload)), e a assinatura ou o MAC é calculado sobre exatamente esses bytes, então uma nova codificação do cabeçalho ou do payload invalida o resultado. A serialização compacta (§3.1, §7.1) leva uma assinatura e um cabeçalho protegido; a serialização JSON (§7.2) permite várias assinaturas e membros de cabeçalho não protegidos.
Parâmetros de cabeçalho (§4.1): alg (obrigatório), kid, typ, cty, crit e os membros que carregam chaves — jwk, jku, x5c, x5u, x5t e x5t#S256 —, nos quais nunca se deve confiar, por si sós, para escolher a chave de verificação. A RFC 7797 acrescenta b64: false para payloads não codificados, usado por assinaturas desanexadas como o cabeçalho x-jws-signature do Open Banking.
Quase todo JWT que você encontra é um JWS; requisições ACME, provas DPoP, assinaturas de emissor do SD-JWT e muitas assinaturas de webhook também são JWS.