Menu

Dekoder JWT

Rozbieraj na części i weryfikuj tokeny JSON Web Token fragment po fragmencie.

Autor: Nethanel Bar, Co-founder & CEO

Ostatnia aktualizacja

Chcesz naprawdę nauczyć się programować?

Coddy uczy cię przez pisanie prawdziwego kodu w przeglądarce: interaktywne lekcje, natychmiastowa informacja zwrotna i pomoc AI, gdy utkniesz.

Czym jest dekoder JWT?

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ł.

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.

ClaimNazwaZnaczenie
issIssuer (wystawca)Kto utworzył i podpisał token
subSubject (podmiot)Kogo dotyczy token, zwykle id użytkownika
audAudience (odbiorca)Dla kogo przeznaczony jest token
expExpiration (wygaśnięcie)Znacznik czasu Unix, po którym token jest nieważny
nbfNot Before (nie wcześniej niż)Tokena nie wolno akceptować przed tym czasem
iatIssued At (wystawiono)Kiedy token został utworzony
jtiJWT IDUnikalny identyfikator, przydatny przy unieważnianiu
algAlgorytm (nagłówek)Algorytm podpisu: HS256, RS256, ES256, …

Przykłady JWT do wypróbowania

Sprawdź typowy JWT

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJzdHVkZW50IiwiZXhwIjoxNzEwMDAwMDAwfQ.Q3hH8yzqI2OsHJ1Lyj8jJfJPa5ZpIVlh1FhJpJbqMcs

Header
{  "alg": "HS256",  "typ": "JWT"}
Payload
{  "sub": "user_123",  "role": "student",  "exp": 1710000000}

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.

Dowiedz się więcej

Inne narzędzia dla programistów

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ