Dekoder tokenów JWT
Darmowy dekoder JWT online. Wklej token JWT, aby zobaczyć zdekodowany nagłówek (header) i ładunek (payload) w czytelnym formacie JSON. Obsługa weryfikacji podpisów HS256/RS256.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Algorytm
Pole alg z nagłówka
Typ
Pole typ z nagłówka
Pola w ładunku
Token
Ładunek nie zawiera pola wygaśnięcia
Podpis
Długość tokenu
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "Jane Doe",
"admin": true,
"iat": 1516239022
}
Pełny raport tekstowy
JWT Decoder Report
==================
Parts
-----
Header (b64url): eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload (b64url): eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0
Signature (b64url): SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Algorithm
---------
alg: HS256
Claims (highlights)
-------------------
sub: 1234567890
iat: 1516239022 (2018-01-18T01:30:22+00:00Z)
Decoded Header
--------------
{
"alg": "HS256",
"typ": "JWT"
}
Decoded Payload
---------------
{
"sub": "1234567890",
"name": "Jane Doe",
"admin": true,
"iat": 1516239022
}
Token JWT to trzy ciągi zapisane alfabetem base64url („-” i „_” zamiast „+” i „/”, bez znaku „=” dopełnienia), sklejone kropkami: header.payload.signature. Dwa pierwsze fragmenty to zwykły JSON — ich odczytanie nie jest weryfikacją, bo treść może podmienić każdy. Dopiero podpis potwierdza, że nagłówek i ładunek pochodzą od posiadacza klucza. Przykład poniżej to token demonstracyjny, którym narzędzie startuje po wejściu na stronę.
| Część | Co zawiera | Ciąg base64url (przykład) |
|---|---|---|
| Header | JSON z typem tokenu i algorytmem (typ, alg) — ten fragment nie jest podpisany | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 → {"alg":"HS256","typ":"JWT"} |
| Payload | JSON z claimami — dane i daty (sub, iat, exp…), tu żyje cała treść tokenu | eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkphbmUgRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0 → {"sub":"1234567890","name":"Jane Doe","admin":true,"iat":1516239022} |
| Signature | Podpis HMAC lub RSA liczony nad tekstem „header.payload” — potwierdza, że treści nie zmieniono | SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c |
Tryb „Tylko dekoduj” nie weryfikuje podpisu — dekodowanie to nie uwierzytelnienie. Aby sprawdzić podpis, przełącz tryb na „Weryfikuj podpis” i podaj sekret HMAC (dla HS*) albo klucz publiczny RSA (dla RS*).
| alg | Rodzaj podpisu | Potrzebny klucz | Weryfikacja w tym narzędziu |
|---|---|---|---|
| none | Brak podpisu | — (token niesygnowany) | Nie — weryfikacja zawsze kończy się niepowodzeniem, treść może zmienić każdy |
| HS256 | HMAC z SHA-256 | Symetryczny sekret | Tak — hash_hmac + hash_equals |
| HS384 | HMAC z SHA-384 | Symetryczny sekret | Tak — hash_hmac + hash_equals |
| HS512 | HMAC z SHA-512 | Symetryczny sekret | Tak — hash_hmac + hash_equals |
| RS256 | RSA z SHA-256 | Asymetryczny klucz publiczny (PEM) | Tak — openssl_verify |
| RS384 | RSA z SHA-384 | Asymetryczny klucz publiczny (PEM) | Tak — openssl_verify |
| RS512 | RSA z SHA-512 | Asymetryczny klucz publiczny (PEM) | Tak — openssl_verify |
Uwaga: dekodowanie wykonuje się po stronie serwera (PHP), więc treść wklejonego tokenu jest przesyłana w żądaniu — nie wklejaj prawdziwych tokenów produkcyjnych. Do tokenów prywatnych używaj narzędzi działających wyłącznie lokalnie w przeglądarce.
JWT a bezpieczeństwo — co warto wiedzieć
Dekodowanie to nie weryfikacja
Odczytanie treści tokenu nie mówi nic o jego autentyczności — podpis trzeba sprawdzić osobno z kluczem. Szczególna pułapka to algorytm „none”: taki token nie ma podpisu w ogóle, więc narzędzie od razu oznacza go jako nieweryfikowalny. Serwer, który akceptuje „none” bez sprawdzenia, jest podatny na pełne podszywanie się pod dowolnego użytkownika.
Traktuj token jak hasło
Token JWT zwykle przenosi tożsamość sesji: podmiot, uprawnienia, czas życia. Wklejenie go w publiczne miejsce daje innym możliwość użycia Twojej sesji, dopóki nie wygaśnie. Ten dekoder liczy po stronie serwera, więc prywatne tokeny wklejaj tylko w narzędziach, które pracują w całości w Twojej przeglądarce.
Daty exp, iat i nbf
Claimy czasowe to sekundy uniksowe: iat to moment wydania, nbf „nie używać przed”, a exp — wygaśnięcie. Powyżej widzisz je przetłumaczone na czytelne daty z informacją, ile czasu zostało. Brak pola exp oznacza token wiecznie ważny — praktycznie zawsze jest to błąd projektowy.
HS* kontra RS*
HS256/384/512 to HMAC — ten sam sekret podpisuje i sprawdza podpis, więc musi być pilnie strzeżony po obu stronach. RS256/384/512 to RSA: podpisuje klucz prywatny, a weryfikuje publiczny, który można swobodnie publikować. Sekretu HMAC nigdy nie wysyłaj do narzędzi internetowych, których nie kontrolujesz.
Wskazówka: ładunek zdekodowanego tokenu pobierzesz jednym kliknięciem jako plik JSON („Pobierz plik”), a w trybie weryfikacji kafelek „Podpis” pokaże wynik porównania podpisu z kluczem.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćDekoder tokenów JWT
Dekoder tokenów JWT (JSON Web Token) pozwala natychmiast zdekodować każdy token JWT i odczytać jego nagłówek oraz ładunek w czytelnej postaci JSON. Narzędzie obsługuje weryfikację podpisów HMAC (HS256, HS384, HS512) i RSA (RS256, RS384, RS512) — bez instalacji bibliotek, bez backendu.
Czym jest JWT?
JSON Web Token (JWT) to otwarty standard (RFC 7519) bezpiecznej wymiany informacji w postaci podpisanego JSON. Token składa się z trzech segmentów oddzielonych kropkami: header (nagłówek z metadanymi i algorytmem), payload (ładunek z tzw. claimami, np. sub, exp, iat) i signature (podpis cyfrowy). Każdy segment jest zakodowany w formacie base64url. JWT jest szeroko stosowany w uwierzytelnianiu (OAuth 2.0, OIDC) i wymianie danych między mikroserwisami.
Jak używać dekodera?
Wklej token JWT w pole tekstowe — narzędzie automatycznie rozdzieli go na trzy segmenty i zdekoduje header oraz payload do czytelnego JSON. Aby zweryfikować podpis HMAC, wybierz tryb „Weryfikuj podpis", ustaw algorytm (lub zostaw „Automatycznie") i wpisz sekret w polu klucza. Dla tokenów RS256/RS384/RS512 wybierz typ „Klucz publiczny RSA" i wklej klucz w formacie PEM. Wynik pokazuje badge algorytmu, badge ważności podpisu oraz ostrzeżenia (np. token wygasł).
Algorytmy i bezpieczeństwo
JWT obsługuje wiele algorytmów podpisu. HS256/HS384/HS512 to algorytmy HMAC — do podpisania i weryfikacji używany jest ten sam sekret (klucz symetryczny). RS256/RS384/RS512 to algorytmy RSA — serwer podpisuje kluczem prywatnym, klient weryfikuje kluczem publicznym (asymetryczne). Wartość alg: none oznacza brak podpisu i jest niebezpieczna w produkcji. Zawsze sprawdzaj pole exp (czas wygaśnięcia) i iss (wystawca). Nigdy nie wklejaj produkcyjnych sekretów ani prywatnych kluczy w narzędzia online — do testów używaj przykładowych wartości.
Jak działa dekodowanie i weryfikacja JWT krok po kroku
Token JWT to trzy segmenty base64url połączone kropkami: header, payload i signature. Dekoder nie wykonuje tu żadnej magii — dzieli tekst po kropkach, a następnie zamienia każdy segment z powrotem na bajty. Base64url to odmiana base64 przygotowana pod adresy URL i nagłówki HTTP: zamiast znaków + i / używa - oraz _, a znak = (padding) jest zwykle pomijany. Dlatego zwykły dekoder base64 potrafi zwrócić błąd — najpierw trzeba podmienić znaki i uzupełnić padding do wielokrotności czterech znaków.
Po dekodowaniu bajty są interpretowane jako UTF-8 i parsowane jako JSON. Widać to już na pierwszym segmencie: tokeny zaczynają się od eyJ, bo te trzy znaki base64url odpowiadają bajtom 0x7B 0x22, czyli początkowi JSON-a {". Nagłówek zawiera pole alg (algorytm podpisu) i zwykle typ, a ładunek — claimy: sub, iat, exp, iss, aud oraz pola własne aplikacji. Oba segmenty dekodowane są niezależnie, więc uszkodzony ładunek nie blokuje odczytu nagłówka.
Weryfikacja podpisu to osobny krok. Dla HMAC narzędzie liczy skrót z dokładnego łańcucha base64url(header) + "." + base64url(payload) — czyli z tych samych znaków, które są w tokenie, a nie ze zdekodowanego JSON-a: HMAC-SHA256(header.payload, sekret), po czym porównuje wynik z trzecim segmentem. Dla RSA podpis sprawdzany jest kluczem publicznym: nagłówek i ładunek trafiają do funkcji weryfikującej z funkcją skrótu SHA-256/384/512, a wynik to potwierdzenie albo odrzucenie podpisu. Każda zmiana choćby jednego znaku w pierwszych dwóch segmentach zmienia wyliczany skrót, więc sygnatura przestaje pasować.
Przykład: odczyt i weryfikacja tokenu HS256
- Wklej w pole tekstowe token złożony z trzech segmentów. W przykładzie użyjemy nagłówka eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 i ładunku eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ, a trzeci segment to podpis.
- Narzędzie dzieli tekst po kropkach i pokazuje rozmiary części. Nagłówek ma 36 znaków base64url, czyli 27 bajtów; ładunek ma 74 znaki, czyli 55 bajtów. Zgodność długości potwierdza, że segmenty nie zostały obcięte w schowku.
- Odczyt nagłówka daje {"alg":"HS256","typ":"JWT"}. Pole alg wskazuje HMAC-SHA256, więc do weryfikacji potrzebny jest sekret, a nie klucz RSA.
- Odczyt ładunku daje claimy: sub = 1234567890, name = John Doe oraz iat = 1516239022, co odpowiada 18 stycznia 2018 (UTC). W tokenie nie ma pola exp, więc narzędzie nie zgłosi ostrzeżenia o wygaśnięciu — nie znaczy to jednak, że token jest wieczny.
- Przełącz tryb na „Weryfikuj podpis”, ustaw algorytm HS256 (albo zostaw „Automatycznie”) i wpisz sekret, którym token został podpisany.
- Narzędzie składa łańcuch z 36 znaków nagłówka, kropki i 74 znaków ładunku (razem 111 znaków), liczy z niego HMAC-SHA256, koduje wynik base64url i porównuje go z trzecim segmentem. Zgodny sekret daje badge ważnego podpisu, a sekret różniący się choćby jednym znakiem — wynik nieprawidłowy, mimo że nagłówek i ładunek nadal dekodują się poprawnie.
Algorytmy obsługiwane przy weryfikacji — ściągawka
| Algorytm | Typ klucza | Funkcja skrótu i długość skrótu |
|---|---|---|
| HS256 | symetryczny — ten sam sekret do podpisania i weryfikacji | SHA-256, 32 bajty |
| HS384 | symetryczny | SHA-384, 48 bajtów |
| HS512 | symetryczny | SHA-512, 64 bajty |
| RS256 | asymetryczny — podpis kluczem prywatnym, weryfikacja kluczem publicznym | SHA-256, 32 bajty |
| RS384 | asymetryczny | SHA-384, 48 bajtów |
| RS512 | asymetryczny | SHA-512, 64 bajty |
| none | brak klucza — token niepodpisany | brak skrótu, trzeci segment pusty |
| Automatycznie | tryb wyboru: narzędzie czyta alg z nagłówka i dopasowuje sposób weryfikacji | zależna od algorytmu z tokenu |
Praktyczne wskazówki przy czytaniu tokenów
- Zacznij od nagłówka, nie od podpisu — pole alg mówi, którego trybu weryfikacji użyć. Wpisanie sekretu HMAC do tokenu RS256 zawsze zakończy się błędem, choć token jest poprawny.
- Podawaj sekret dokładnie tak, jak w backendzie — bez cudzysłowów, bez spacji na końcu i bez zmiany kodowania. Ten sam ciąg znaków zapisany inaczej da inny skrót i wynik nieprawidłowy.
- Do RSA używaj klucza publicznego w PEM — razem z liniami BEGIN i END. Klucz prywatny nie jest potrzebny do weryfikacji i nie powinien krążyć poza serwerem podpisującym.
- Sprawdzaj komplet claimów czasowych — exp to nie wszystko: iat pozwala ustalić, kiedy token wystawiono, a brak exp w tokenie sesyjnym bywa celowy albo bywa przeoczeniem.
- Testuj weryfikację na tokenie, który znasz — zanim uznasz, że narzędzie się myli, porównaj zdekodowany alg z wybranym trybem. Najczęstsza przyczyna fałszywego błędu to niezgodność trybu z algorytmem.
Czego ta weryfikacja nie obejmuje
- Brak oceny zaufania klucza — narzędzie sprawdza tylko matematyczną zgodność podpisu z kluczem, który mu podano. Nie ustala, czy klucz pochodzi z zaufanego źródła, czy nie wygasł i czy nie został podmieniony.
- Brak kontroli unieważnienia — poprawnie podpisany token może być już odwołany po stronie serwera. Narzędzie nie sięga do list odwołań ani do stanu sesji w bazie.
- Zakres obsługiwanych algorytmów — weryfikacja obejmuje algorytmy HMAC i RSA wymienione w tabeli. Token podpisany innym algorytmem zdekodujesz i odczytasz, ale podpisu nie potwierdzisz.
- Brak reguł biznesowych — narzędzie nie wie, jakie wartości sub, aud, iss czy zakres uprawnień są oczekiwane w Twojej aplikacji. Zgodny podpis i niewygasły exp to warunek konieczny, ale nie wystarczający.
Najczęstsze pytania
Czy dekodowanie JWT wymaga klucza?
Nie. Segmenty header i payload są jedynie zakodowane w base64url — każdy może je zdekodować bez znajomości klucza. Klucz jest potrzebny wyłącznie do weryfikacji podpisu, czyli sprawdzenia, że token nie został zmodyfikowany. To celowa właściwość standardu: JWT jest podpisany, nie zaszyfrowany (jeśli nie użyjesz JWE).
Co oznacza claim „exp" w tokenie JWT?
Claim exp (expiration time) to uniksowy timestamp określający moment wygaśnięcia tokenu. Aplikacja powinna odrzucać tokeny, w których exp jest w przeszłości. Narzędzie wyświetla ostrzeżenie, jeśli token wygasł. Analogicznie claim nbf (not before) wskazuje, od kiedy token jest ważny.
Jaka jest różnica między HS256 a RS256?
HS256 (HMAC-SHA256) używa jednego wspólnego sekretu do podpisywania i weryfikacji. RS256 (RSA-SHA256) używa pary kluczy: serwer podpisuje kluczem prywatnym, a strony zewnętrzne mogą weryfikować kluczem publicznym bez dostępu do klucza prywatnego. RS256 jest preferowany w architekturach z wieloma usługami i federowanym tożsamościami (np. OIDC).
Czy moje dane są bezpieczne?
Narzędzie działa całkowicie po stronie serwera — token jest przetwarzany tylko podczas aktualnej sesji i nie jest zapisywany ani udostępniany. Mimo to nigdy nie wklejaj w narzędzia online tokenów z produkcyjnymi danymi użytkowników ani sekretów kluczy produkcyjnych. Do testów zawsze używaj przykładowych lub dedykowanych tokenów testowych.
Czy dekoder JWT wysyła token na serwer?
Nie. Podział na segmenty, dekodowanie base64url oraz weryfikacja HMAC i RSA wykonują się w przeglądarce, bez backendu. Mimo to token wklejony do schowka lub zapisany w historii nadal jest danymi, które warto traktować ostrożnie.
Czym różni się dekodowanie tokenu od weryfikacji podpisu?
Dekodowanie to wyłącznie odwrócenie base64url i odczyt JSON-a — dostępne dla każdego, kto ma token. Weryfikacja sprawdza dodatkowo, czy trzeci segment powstał z nagłówka i ładunku przy użyciu właściwego klucza.
Dlaczego weryfikacja HMAC zwraca błąd, choć token jest poprawny?
Najczęściej podano inny sekret, wybrano zły algorytm albo token został w międzyczasie zmodyfikowany. Każda zmiana w nagłówku lub ładunku zmienia wyliczany skrót, więc podpis przestaje pasować.
Czy da się odczytać token JWT bez klucza?
Tak. Nagłówek i ładunek są tylko zakodowane base64url, a nie zaszyfrowane. Klucz potrzebny jest wyłącznie do weryfikacji podpisu, nie do odczytu zawartości.
Co oznacza alg: none w tokenie?
Że token nie ma podpisu — trzeci segment jest pusty. Takie tokeny bywają używane w testach, ale w środowisku produkcyjnym są niebezpieczne, bo pozwalają dowolnie podmienić ładunek.