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.
