O Base64 converte cada 3 bytes em 4 caracteres, então o tamanho codificado é cerca de 4/3 da entrada: uma assinatura ES256 de 64 bytes vira 86 caracteres, e uma assinatura RS256 de 256 bytes, 342. O JWS, o JWE e a JWK usam base64url sem padding (RFC 7515 §2), assim como o id e o rawId do WebAuthn em JSON, as provas DPoP e as disclosures do SD-JWT. Os arquivos PEM e o MIME usam o alfabeto padrão, com padding e quebras de linha.
Bugs típicos: a decodificação de base64url com um decodificador base64 padrão (que falha com - ou _ ou os corrompe silenciosamente), a adição ou a exigência do padding =, a mistura dos dois alfabetos ao mover chaves entre PEM e JWK e a comparação das strings codificadas em vez dos bytes decodificados. Parsers JOSE estritos rejeitam padding e espaços em branco dentro de um token compacto.
APIs: Buffer.from(s, "base64url") e buf.toString("base64url") no Node.js; base64.urlsafe_b64encode no Python (ele mantém o padding, que você precisa remover); base64.RawURLEncoding no Go; Base64.getUrlEncoder().withoutPadding() no Java.