Dekoder JWT dzieli token JSON Web Token na trzy części (nagłówek, payload i podpis) i dekoduje dwie pierwsze z Base64URL, aby dało się je odczytać jako JSON. Programiści używają go stale podczas debugowania procesów logowania, autoryzacji, claimów sesji i problemów z wygasaniem tokenów.
Zdekodowanie JWT *nie* oznacza, że można mu ufać. Nagłówek i payload są z założenia czytelne: są tylko zakodowane w Base64URL, a nie zaszyfrowane. To weryfikacja sprawdza, czy token został podpisany przez oczekiwaną stronę i czy nikt go nie zmodyfikował. Skradziony token lub sesja działają, dopóki ktoś ich nie zakończy: w darmowym kursie cyberbezpieczeństwa Coddy resetujesz skradzione hasło, co wylogowuje wszystkie otwarte sesje, także sesję atakującego.
JWT wygląda tak: header.payload.signature. Każda część jest zakodowana w Base64URL i oddzielona kropkami. Nagłówek mówi, jaki algorytm podpisu jest używany, payload niesie claimy (kim jest użytkownik, kiedy token wygasa, co wolno mu robić), a podpis pozwala serwerowi udowodnić, że token nie został zmieniony.
Czego nauczysz się, dekodując JWT
JWT ma trzy części zakodowane w Base64URL, oddzielone kropkami: header.payload.signature.
Popularne claimy, takie jak sub, role, iat, nbf i exp, opisują tożsamość, uprawnienia, czas wystawienia i czas wygaśnięcia.
Zdekodowany payload może edytować każdy: tylko podpis pozwala serwerowi wykryć manipulację.
Algorytmy się różnią: HS256 używa wspólnego sekretu, a RS256 i ES256 par kluczy publiczny/prywatny. Pole alg w nagłówku mówi, który został użyty.
Jak zdekodować JWT krok po kroku
1
Wklej cały token
Wklej JWT do pola wejściowego. Powinien wyglądać jak xxxx.yyyy.zzzz: trzy części zakodowane w Base64URL połączone kropkami.
2
Odczytaj nagłówek
Nagłówek podaje algorytm podpisu (alg) i typ tokena. Uważaj na "alg": "none": oznacza to, że token nie jest podpisany i nie można mu ufać.
3
Odczytaj claimy z payloadu
Payload to JSON ze wszystkimi claimami. Szukaj sub (id użytkownika), exp (wygaśnięcie), iat (czas wystawienia) i własnych claimów dodawanych przez twoją aplikację, np. role lub tenant.
4
Sprawdź wygaśnięcie
Zamień znacznik czasu Unix z exp na datę: jeśli jest w przeszłości, token wygasł i każde porządne API go odrzuci.
5
Zweryfikuj podpis (opcjonalnie)
Jeśli masz sekret lub klucz publiczny, wklej go do weryfikatora, aby potwierdzić, że podpis jest prawidłowy. Zawartości tokena można ufać tylko wtedy, gdy podpis się zgadza.
Standardowe claimy JWT
To zarejestrowane claimy zdefiniowane w specyfikacji JWT (RFC 7519). Każda aplikacja może dodać obok nich własne claimy.
Claim
Nazwa
Znaczenie
iss
Issuer (wystawca)
Kto utworzył i podpisał token
sub
Subject (podmiot)
Kogo dotyczy token, zwykle id użytkownika
aud
Audience (odbiorca)
Dla kogo przeznaczony jest token
exp
Expiration (wygaśnięcie)
Znacznik czasu Unix, po którym token jest nieważny
nbf
Not Before (nie wcześniej niż)
Tokena nie wolno akceptować przed tym czasem
iat
Issued At (wystawiono)
Kiedy token został utworzony
jti
JWT ID
Unikalny identyfikator, przydatny przy unieważnianiu
Nagłówek mówi HS256 (algorytm ze wspólnym sekretem). Payload identyfikuje użytkownika, jego rolę i czas wygaśnięcia tokena. Podpis to trzecia część. (To przykładowy token do demonstracji: podpis nie przejdzie weryfikacji z żadnym prawdziwym sekretem).
Sprawdź, czy token wygasł
Claim w payloadzie
{"exp":1710000000}
exp to znacznik czasu Unix w sekundach. Zamień go na datę: jeśli jest w przeszłości, token wygasł i poprawnie działający backend go odrzuci.
Wyłap niebezpieczny algorytm "none"
Header
{"alg":"none","typ":"JWT"}
Jeśli serwer akceptuje "alg": "none", atakujący może sfałszować dowolny payload bez podpisu. Na produkcji zawsze odrzucaj taki nagłówek.
Częste błędy przy JWT
Umieszczanie haseł, sekretów lub wrażliwych danych osobowych w payloadzie. JWT są czytelne, a nie zaszyfrowane.
Dekodowanie tokena i zakładanie, że jest ważny, bez sprawdzenia podpisu.
Mylenie czytelności Base64URL z szyfrowaniem: payload JWT celowo łatwo odczytać.
Przechowywanie JWT w localStorage bez uwzględnienia ryzyka XSS, a do tego z bardzo długim czasem ważności.
Brak walidacji claimu aud (odbiorca): token wystawiony dla jednej usługi może zostać użyty w innej, jeśli odbiorca tego nie sprawdza.
JWT: najczęstsze pytania
Co to jest JWT?
JWT to skrót od JSON Web Token. To zwarty, podpisany i bezpieczny dla URL format tokena służący do przekazywania claimów między dwiema stronami, najczęściej między serwerem a przeglądarką, aby reprezentować zalogowanego użytkownika.
Jak zdekodować JWT?
Wklej token do dekodera JWT albo podziel go w miejscach kropek i zdekoduj z Base64URL każdą z dwóch pierwszych części. Nagłówek i payload wrócą jako JSON; trzecia część to podpis.
Jak sprawdzić, czy JWT wygasł?
Spójrz na claim exp w payloadzie. To znacznik czasu Unix w sekundach. Jeśli bieżący czas jest późniejszy niż exp, token wygasł.
Czy każdy może zdekodować JWT?
Tak. Nagłówek i payload są zakodowane w Base64URL, a nie zaszyfrowane. Podpis dowodzi tylko, że token nie został zmodyfikowany; nie ukrywa jego zawartości.
Na czym polega weryfikacja JWT?
Weryfikacja ponownie oblicza podpis przy użyciu oczekiwanego sekretu lub klucza publicznego i porównuje go z podpisem w tokenie. Jeśli się zgadzają, payload jest wiarygodny i niezmieniony.
Czy mogę przechowywać hasła w JWT?
Nie. Każdy, kto ma token, może odczytać payload. Przechowuj w nim tylko niewrażliwe identyfikatory i claimy, a bezpieczeństwo opieraj na krótkim czasie ważności i tokenach odświeżania.