Base64 bildet je 3 Byte auf 4 Zeichen ab, die kodierte Größe beträgt also etwa 4/3 der Eingabe: Eine ES256-Signatur mit 64 Byte wird zu 86 Zeichen, eine RS256-Signatur mit 256 Byte zu 342. JWS, JWE und JWK verwenden base64url ohne Padding (RFC 7515 §2), ebenso id und rawId von WebAuthn in JSON, DPoP-Proofs und SD-JWT-Disclosures. PEM-Dateien und MIME verwenden das Standardalphabet mit Padding und Zeilenumbrüchen.
Typische Fehler: base64url mit einem gewöhnlichen base64-Decoder dekodieren (scheitert an - oder _ oder verfälscht sie stillschweigend), Padding mit = hinzufügen oder verlangen, die beiden Alphabete vermischen, wenn Schlüssel zwischen PEM und JWK wandern, und kodierte Strings statt der dekodierten Bytes vergleichen. Strikte JOSE-Parser lehnen Padding und Whitespace innerhalb eines kompakten Tokens ab.
APIs: Buffer.from(s, "base64url") und buf.toString("base64url") in Node.js; base64.urlsafe_b64encode in Python (behält das Padding, das du selbst entfernst); base64.RawURLEncoding in Go; Base64.getUrlEncoder().withoutPadding() in Java.