Nodea — logo

JWT

JWT (JSON Web Token) to otwarty standard (RFC 7519) definiujący zwarty, samowystarczalny sposób bezpiecznego przekazywania informacji między stronami w postaci obiektu JSON. Token jest podpisany cyfrowo, dzięki czemu odbiorca może zweryfikować, że dane nie zostały zmienione i pochodzą od zaufanego wystawcy. JWT jest dziś fundamentem bezstanowego uwierzytelniania w aplikacjach webowych i API.

Jak zbudowany jest JWT?

Token składa się z trzech części oddzielonych kropkami, z których każda jest zakodowana w Base64URL:

  • nagłówek (header) — określa typ tokena i algorytm podpisu, np. HS256 lub RS256;
  • ładunek (payload) — zawiera tzw. claims, czyli oświadczenia: identyfikator użytkownika, role, czas wygaśnięcia (exp), wystawcę (iss);
  • podpis (signature) — powstaje przez zaszyfrowanie nagłówka i ładunku kluczem tajnym lub prywatnym; to on gwarantuje integralność.

Serwer, otrzymując token, przelicza podpis własnym kluczem i porównuje z tym w tokenie. Zgodność oznacza, że payload jest autentyczny — bez potrzeby odpytywania bazy danych o sesję. W przypadku algorytmów asymetrycznych (RSA, ECDSA) podpis składa się kluczem prywatnym, a weryfikuje publicznym, co pozwala rozdzielić wystawcę tokena od usług, które go jedynie sprawdzają.

Zastosowanie w praktyce

Najczęstszy scenariusz to logowanie: po poprawnym uwierzytelnieniu serwer wystawia JWT, który klient dołącza do kolejnych żądań w nagłówku Authorization: Bearer. Serwer weryfikuje token przy każdym zapytaniu, nie utrzymując stanu sesji, co ułatwia poziome skalowanie usług i architektury mikroserwisowe. JWT bywa też tokenem dostępu i tokenem ID w przepływach OAuth 2.0 i OpenID Connect.

Bezpieczne użycie wymaga dyscypliny: krótki czas życia tokena, wymuszanie mocnego algorytmu (odrzucanie alg: none), przesyłanie wyłącznie po HTTPS oraz przemyślany mechanizm odświeżania i unieważniania. Ponieważ payload jest tylko zakodowany, a nie zaszyfrowany, nie umieszcza się w nim haseł ani innych wrażliwych danych.

Powiązane pojęcia

Najczęstsze pytania

Czy dane w JWT są zaszyfrowane?

Nie w standardowej postaci. Payload JWT jest jedynie zakodowany w Base64URL, więc każdy może go odczytać. Token jest natomiast podpisany, co pozwala wykryć manipulację. Poufnych danych nie należy umieszczać w JWT bez dodatkowego szyfrowania (JWE).

Czym różni się JWT od klasycznej sesji?

Sesja przechowuje stan po stronie serwera, a przeglądarka trzyma tylko identyfikator w ciasteczku. JWT jest bezstanowy — wszystkie potrzebne dane niesie sam token, więc serwer nie musi utrzymywać sesji w pamięci. Ułatwia to skalowanie, ale utrudnia natychmiastowe unieważnienie tokena.