Base64 превращает каждые 3 байта в 4 символа, поэтому размер закодированных данных составляет примерно 4/3 от размера входных данных: 64-байтная подпись ES256 занимает 86 символов, а 256-байтная подпись RS256 — 342. JWS, JWE и JWK используют base64url без дополнения (RFC 7515, § 2), как и поля id и rawId WebAuthn в JSON, доказательства DPoP и раскрытия SD-JWT. В файлах PEM и в MIME используется стандартный алфавит с дополнением и переносами строк.
Типичные ошибки: декодирование base64url стандартным декодером base64 (он выдаёт ошибку на - или _ либо молча искажает эти символы), добавление или обязательное требование дополнения =, смешивание двух алфавитов при переносе ключей между PEM и JWK и сравнение закодированных строк вместо декодированных байтов. Строгие парсеры JOSE отвергают дополнение и пробельные символы внутри компактного токена.
API: Buffer.from(s, "base64url") и buf.toString("base64url") в Node.js; base64.urlsafe_b64encode в Python (функция сохраняет дополнение, и его нужно убрать самостоятельно); base64.RawURLEncoding в Go; Base64.getUrlEncoder().withoutPadding() в Java.