> base64url | jwt | url-bezpieczne <
// Base64url - wariant Base64 bez paddingu, bezpieczny dla adresów URL i nazw plików
Zgodne z URL
Brak specjalnych znaków URL – bezpieczne dla parametrów zapytania i ścieżek.
Standard JWT
Używane w JSON Web Tokens oraz specyfikacjach OAuth 2.0.
Opcjonalny padding
Znaki paddingu (=) można pominąć, aby adresy URL były bardziej czytelne.
>> informacje techniczne
Jak działa Base64url:
Base64url to wariant Base64, który zastępuje "+" znakiem "-" oraz "/" znakiem "_", dzięki czemu wynik jest bezpieczny dla adresów URL i nazw plików. Znak paddingu "=" jest często pomijany, ponieważ może powodować problemy w adresach URL.
Porównanie:
Base64: SGVsbG8+Pw== Base64url: SGVsbG8-Pw
Dlaczego warto używać Base64url:
- >Tokeny JWT
- >Przepływy OAuth 2.0
- >Parametry zapytania w URL
- >Kodowanie nazw plików
- >Podpisy Web API
>> najczęstsze pytania
Czym jest Base64url?
Base64url to wariant kodowania Base64 bezpieczny dla adresów URL i nazw plików. Zastępuje "+" znakiem "-", "/" znakiem "_" oraz opcjonalnie usuwa znaki paddingu "=", aby uniknąć problemów z kodowaniem URL.
Dlaczego nie używać zwykłego Base64 w adresach URL?
Zwykłe Base64 używa znaków "+", "/" i "=", które mają specjalne znaczenie w adresach URL. "+" może zostać zinterpretowany jako spacja, "/" jest separatorem ścieżki, a "=" służy do parametrów – co może powodować problemy podczas parsowania.
Gdzie używany jest Base64url?
Base64url jest szeroko stosowany w JWT (JSON Web Tokens), kodach autoryzacyjnych OAuth 2.0, asercjach SAML oraz wszędzie tam, gdzie trzeba przekazywać dane binarne w adresach URL lub nagłówkach HTTP.
Czy w Base64url padding jest wymagany?
Nie, padding w Base64url jest opcjonalny. Wiele implementacji pomija go, ponieważ długość można obliczyć. Specyfikacja JWT wymaga wręcz braku paddingu, aby adresy URL były krótsze i bardziej przejrzyste.
// Różnice względem Base64
| Base64 | Base64url |
|---|---|
| + | - |
| / | _ |
| = | — |
// Base64url w kodzie
JavaScript btoa(s).replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'')
Node.js Buffer.from(s).toString('base64url')
Python base64.urlsafe_b64encode(b).rstrip(b'=')
Go base64.RawURLEncoding.EncodeToString(b)
Padding s + '=' * (-len(s) % 4)
>> Więcej pytań
P: Dlaczego Base64url pomija „=”?
O: Dopełnienie można wywnioskować z długości, a „=” ma specjalne znaczenie w adresach URL i ciągach zapytań. Dlatego JWT (RFC 7515) i wiele API zapisuje Base64url bez dopełnienia.
P: Jak przywrócić dopełnienie przed dekodowaniem?
O: Sprawdź długość modulo 4: reszta 2 → dodaj ==, reszta 3 → dodaj =, reszta 0 → nic. Reszta 1 nigdy nie jest poprawna. Zamień też - na +, a _ na /.
P: Czy Base64url to szyfrowanie?
O: Nie, to tylko kodowanie – każdy może je odwrócić. Treść payloadu JWT jest czytelna, więc nie umieszczaj tam sekretów.