Przejdź do treści

Token JWT — co to jest, z czego się składa i jak go bezpiecznie używać

Redakcja AMKBIT · · 2 min czytania

Nagłówek, treść i podpis, pola exp, iat i sub, różnica między podpisem a szyfrowaniem oraz najczęstsze błędy przy logowaniu z użyciem JWT. Przewodnik dla programistów aplikacji internetowych.

JWT (JSON Web Token) to sposób przekazywania informacji o użytkowniku między serwerem a aplikacją. Najczęściej służy do logowania: po podaniu hasła serwer wydaje token, a aplikacja dołącza go do kolejnych zapytań (zwykle w nagłówku Authorization: Bearer …).

Budowa tokenu

Token to trzy części oddzielone kropkami: nagłówek.treść.podpis. Dwie pierwsze to JSON zakodowany w Base64URL (odmiana Base64 bez znaków + i /).

  • Nagłówek — algorytm podpisu, np. {"alg":"HS256","typ":"JWT"}.
  • Treść (payload) — tzw. claims: kto (sub), kiedy wydano (iat), do kiedy ważny (exp), dla kogo (aud), kto wydał (iss) i dowolne dane aplikacji, np. rola.
  • Podpis — wyliczony z nagłówka i treści przy użyciu sekretu (HS256) albo klucza prywatnego (RS256, ES256). Pozwala wykryć każdą zmianę tokenu.

Pola czasu (exp, iat, nbf) to znaczniki Unix — liczba sekund od 1970 r. Zamienisz je na datę w konwerterze czasu Unix.

Podpisany to nie znaczy zaszyfrowany

Najważniejsza rzecz do zapamiętania: treść zwykłego JWT może przeczytać każdy, kto ma token — wystarczy zdekodować Base64. Podpis chroni przed zmianą, nie przed odczytaniem. Dlatego w tokenie nie umieszcza się haseł, numerów PESEL ani innych poufnych danych.

Zawartość tokenu i daty ważności sprawdzisz w dekoderze JWT — działa lokalnie, token nie jest nigdzie wysyłany. Mimo to nie wklejaj nigdzie tokenów produkcyjnych, które są jeszcze ważne: kto ma token, ten może działać jako dany użytkownik.

Dobre praktyki

  • Krótki czas ważności tokenu dostępowego (np. 5–15 minut) i osobny token odświeżający przechowywany bezpieczniej.
  • Weryfikuj podpis i algorytm po stronie serwera — nie ufaj polu alg z samego tokenu; odrzucaj "alg":"none".
  • Sprawdzaj exp, iss i aud przy każdym zapytaniu.
  • Silny sekret dla HS256 (losowy, co najmniej 256 bitów) albo klucze asymetryczne, gdy token weryfikuje wiele usług.
  • Przechowywanie w przeglądarce — ciasteczko z flagami HttpOnly, Secure i SameSite jest odporniejsze na kradzież przez złośliwe skrypty niż localStorage.
  • Wylogowanie — JWT jest ważny do wygaśnięcia, nawet po wylogowaniu; jeśli trzeba go unieważnić wcześniej, potrzebna jest lista zablokowanych tokenów lub krótki czas życia.

JWT czy sesja?

Klasyczna sesja (identyfikator w ciasteczku, dane na serwerze) jest prostsza i łatwiej ją unieważnić — dla zwykłej strony z logowaniem często wystarcza. JWT sprawdza się, gdy wiele niezależnych usług (API, aplikacja mobilna, mikroserwisy) musi weryfikować użytkownika bez wspólnej bazy sesji.

Treść tokenu łatwiej czytać po sformatowaniu — użyj formatowania JSON, a pojedyncze fragmenty zdekodujesz dekoderem Base64.

Narzędzia do tego poradnika

JWTuwierzytelnianieAPIbezpieczeństwoBase64tokeny

Przeczytaj też