Aller au contenu
ecdsa.com

Base64url

L’alphabet base64 compatible avec les URL et les noms de fichiers de la RFC 4648 §5, qui remplace + et / par - et _ et qui, dans JOSE, omet les = de remplissage ; chaque partie d’un JWT est encodée en base64url.
Autres graphiesbase64urlBase64URLURL-safe base64RFC 4648 section 5

Base64 fait correspondre 4 caractères à chaque groupe de 3 octets, si bien que la taille encodée vaut environ 4/3 de l’entrée : une signature ES256 de 64 octets devient 86 caractères, une signature RS256 de 256 octets en donne 342. JWS, JWE et JWK utilisent base64url sans remplissage (RFC 7515 §2), tout comme les champs id et rawId de WebAuthn en JSON, les preuves DPoP et les divulgations SD-JWT. Les fichiers PEM et MIME utilisent l’alphabet standard, avec remplissage et retours à la ligne.

Erreurs fréquentes : le décodage de base64url avec un décodeur base64 standard (qui échoue sur - ou _, ou les altère sans le signaler), l’ajout ou l’exigence du remplissage =, le mélange des deux alphabets lors de la conversion de clés entre PEM et JWK, et la comparaison des chaînes encodées au lieu des octets décodés. Les analyseurs JOSE stricts rejettent le remplissage et les espaces à l’intérieur d’un jeton compact.

API : Buffer.from(s, "base64url") et buf.toString("base64url") dans Node.js ; base64.urlsafe_b64encode en Python (qui conserve le remplissage, à retirer vous-même) ; base64.RawURLEncoding en Go ; Base64.getUrlEncoder().withoutPadding() en Java.

Normes et références

Tous les termes