Base64URL ändert zwei Buchstaben des Alphabets: Das Pluszeichen von Base64 wird zu einem Bindestrich und der Schrägstrich zu einem Unterstrich. Die kodierten Informationen bleiben unverändert. Die Variante hilft, wenn das umgebende Protokoll dem Pluszeichen oder Schrägstrich eine besondere Bedeutung zuweist, aber sie befreit den Wert nicht von jeder URL- oder Anwendungsregel.
Verwenden Sie einen Vektor, der den Unterschied verdeutlicht
Die Bytes FB FF kodieren als +/8= im Standard Base64 und -_8= in Base64URL. Ein Test wie Hello erzeugt nur gemeinsame Alphabetzeichen und kann daher nicht erkennen, ob die URL-sichere Konvertierung funktioniert.
const standard = btoa(String.fromCharCode(251, 255));
const urlSafe = standard.replace(/\+/g, '-').replace(/\//g, '_');
console.log(standard); // +/8=
console.log(urlSafe); // -_8=
Polsterung ist eine gesonderte Vereinbarung
Viele Tokenformate lassen abschließende Gleichheitszeichen weg, während andere Systeme sie beibehalten. Die Änderung des Alphabets und das Entfernen des Paddings sind getrennte Entscheidungen. Hat die Länge einer Eingabe ohne Padding bei der Division durch vier den Rest 2, werden zwei Gleichheitszeichen benötigt; bei Rest 3 wird eines benötigt. Rest 1 kann nicht allein durch Padding korrigiert werden, da ein einzelnes Sechs-Bit-Zeichen nicht ausreicht, um ein vollständiges Byte darzustellen.
Überprüfen Sie bei der Validierung auch nicht verwendete Bits im letzten Zeichen. Ein Decoder, der sie ignoriert, akzeptiert möglicherweise mehrere Zeichenfolgen für dieselbe Bytesequenz. Diese Mehrdeutigkeit kann von Bedeutung sein, wenn eine Anwendung codierte Zeichenfolgen anstelle decodierter Bytes vergleicht. Ein kanonischer Produzent sollte eine vereinbarte Darstellung abgeben.
Verwechseln Sie das Abfrageparsen nicht mit der Base64-Dekodierung
Beim Parsen von Abfragen im Formularstil wird ein wörtliches Pluszeichen als Leerzeichen interpretiert. Ein Standardwert Base64, der ohne Escapezeichen in eine Abfrage eingefügt wird, kann daher beschädigt sein, bevor der Decoder ihn sieht. Konstruieren Sie die Abfrage mit URLSearchParams, oder verwenden Sie die Variante Base64URL, wenn das Empfangsprotokoll dies angibt.
const query = new URLSearchParams({ payload: '+/8=' });
console.log(query.toString()); // payload=%2B%2F8%3D
console.log(query.get('payload')); // +/8=
Ersetzen Sie nicht jedes Leerzeichen automatisch durch ein Pluszeichen: Ein Leerzeichen könnte eine echte Formatierung oder ein Hinweis auf einen anderen Fehler sein. Behalten Sie die Quelle bei, identifizieren Sie die Transportschicht, die sie geändert hat, und wenden Sie eine bewusste Korrektur an. Verwenden Sie für JWT-Segmente die Base64URL-Regeln des Tokenformats, anstatt eine allgemeine Reparaturrichtlinie zu erfinden.
Die Standard- und URL-sicheren Alphabete werden in beschrieben RFC 4648. Ihre Integration benötigt weiterhin explizite Optionen für die Auffüllung, die Akzeptanz von Leerzeichen und die maximale Länge.