Co to jest JWT? Pełne wyjaśnienie tokenów internetowych JSON
Szybka odpowiedź
JWT to ciąg z trzema częściami zakodowanymi Base64URL oddzielonymi kropkami: header.payload.signature. Header określa algorytm, payload zawiera claims (user ID, roles, expiration), a signature udowadnia autentyczność. Użyj naszego darmowego JWT Decoder aby inspectować zawartość tokenu.
Wstęp
JWT (JSON Web Token) to kompaktowy, URL-safe format tokenu zdefiniowany przez RFC 7519 do bezpiecznej transmisji informacji między stronami jako obiekt JSON. JWTy są powszechnie używane do autentykacji w web aplikacjach: po loginie server wydaje JWT, który klient dołącza do kolejnych żądań. JWTy są stateless —server nie musi lookup tokenu w bazie; token sam zawiera claims i signature.
Krok po kroku
-
Zrozumienie trzyczęściowej struktury
JWT składa się z trzech części: nagłówka (algorytm i typ), ładunku (oświadczenia) i podpisu (dowodzi integralności). Każda część jest zakodowana w formacie Base64URL i oddzielona kropkami: eyJhbGciOi...J9.eyJzdWIi...J9.signature. Pierwsze dwie części są czytelne dla każdego, kto posiada token; jedynie podpis wymaga tajnego klucza.
-
Poznaj standardowe twierdzenia
Ładunek zawiera oświadczenia — stwierdzenia na dany temat. Standardowe oświadczenia: „sub” (identyfikator podmiotu/użytkownika), „iat” (wydany w momencie sygnatury czasowej), „exp” (wygaśnięcie), „nbf” (nie wcześniej), „iss” (wystawca), „aud” (odbiorcy). Oświadczenia niestandardowe mogą obejmować role, uprawnienia lub dowolne inne dane.
-
Zrozumienie algorytmów podpisywania
JWT używają podpisu symetrycznego (HS256 — wspólny sekret) lub asymetrycznego (RS256, ES256 — para kluczy publiczny/prywatny). Podpis zapobiega manipulacji: zmiana jakiejkolwiek części tokena unieważnia podpis. Tylko posiadacz tajnego/prywatnego klucza może tworzyć ważne tokeny.
-
Użyj tokenów JWT do uwierzytelniania
Po zalogowaniu serwer tworzy JWT i wysyła go do klienta. Klient dołącza JWT w nagłówku autoryzacji (token nośnika) dla kolejnych żądań. Serwer weryfikuje podpis i sprawdza datę ważności — nie jest potrzebne przeszukiwanie bazy danych.
Przykłady
__ZACHOWAJ_18__ strukturę
Wejście: Typowy JWT
Wyjście: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
Zdekodowany nagłówek
Wejście: Pierwsza część rozszyfrowana
Wyjście: {"alg": "HS256", "typ": "JWT"}
Zdekodowany ładunek
Wejście: Część druga rozszyfrowana
Wyjście: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Typowe problemy
- Dekodowanie a weryfikacja — dekodowanie JWT (czytanie jego zawartości) NIE dowodzi, że jest on autentyczny. Zawsze sprawdzaj podpis po stronie serwera za pomocą tajnego klucza, zanim zaufasz oświadczeniom.
- Przechowywanie JWT w localStorage — dzięki temu są one dostępne dla JavaScript i podatne na ataki XSS. Przechowuj w plikach cookie httpOnly dla większego bezpieczeństwa.
- Tokeny długowieczne — jeśli token zostanie skradziony, pozostaje on ważny aż do wygaśnięcia. Używaj krótkotrwałych tokenów dostępu (15–60 min) z tokenami odświeżania w przypadku długich sesji.
- Wrażliwe dane w ładunku — ładunek może zostać odczytany przez każdą osobę posiadającą token (jest to Base64, nie jest szyfrowany). Nigdy nie umieszczaj haseł, kart kredytowych ani sekretów w ładunku.
Porady
- Zawsze sprawdzaj podpis JWT po stronie serwera, zanim zaufasz jakimkolwiek twierdzeniom — samo dekodowanie nie jest uwierzytelnieniem.
- Używaj krótkotrwałych tokenów dostępu (15–60 minut) z tokenami odświeżania w przypadku długich sesji, aby zminimalizować szkody wynikające z kradzieży tokenów.
- Przechowuj JWT w plikach cookie httpOnly, Secure, SameSite zamiast localStorage, aby zapobiec atakom XSS.
- Skorzystaj z naszego dekodera JWT, aby sprawdzić zawartość tokena w celu debugowania — Twój token nigdy nie opuszcza przeglądarki.