> base64url | jwt | url-bezpieczne <

// Base64url - wariant Base64 bez paddingu, bezpieczny dla adresów URL i nazw plików

[URL-SAFE]

Zgodne z URL

Brak specjalnych znaków URL – bezpieczne dla parametrów zapytania i ścieżek.

[JWT]

Standard JWT

Używane w JSON Web Tokens oraz specyfikacjach OAuth 2.0.

[NO-PADDING]

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

Base64Base64url
+-
/_
=—

// 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.

Inne języki