Dekoduj token JWT: nagłówek i payload jako JSON, daty exp, iat i nbf w czasie polskim, stan ważności oraz weryfikacja podpisu HS256, HS384 i HS512 sekretem.
JWT Decoder - Dekoder Tokenu JWT i Weryfikacja Podpisu
Dekoduj token JWT: nagłówek i payload jako JSON, daty exp, iat i nbf w czasie polskim, stan ważności oraz weryfikacja podpisu HS256, HS384 i HS512 sekretem.
Parametry
Wprowadź dane do obliczeń
💡 Wypełnij wszystkie wymagane pola, aby odblokować przycisk obliczania
Token JWT przed dekodowaniem i po nim
Ciąg zaczynający się od eyJ z dwiema kropkami to prawie zawsze JWT, czyli JSON Web Token. Dekoder rozdziela go na nagłówek, payload i podpis, zamienia base64url z powrotem na czytelny JSON, tłumaczy daty exp, iat i nbf na czas polski i mówi, czy token jeszcze jest ważny. Po wpisaniu sekretu sprawdza też podpis HS256, HS384 albo HS512.
Bez dekodera
- długi ciąg znaków, z którego nie widać, kto go wystawił i dla kogo
- data wygaśnięcia jako liczba w rodzaju 1700003600
- nie wiadomo, czy błąd 401 to wygasły token, czy zły podpis
- łatwo przeoczyć
"alg": "none"albo za krótki sekret
Z dekoderem
- nagłówek i payload jako sformatowany JSON
- każda data w czasie polskim, w UTC i jako „za 1 h” lub „2 dni temu”
- osobno stan podpisu i stan ważności
- ostrzeżenia oparte na RFC 7519 i RFC 7518
- Token - wklej cały, może być z przedrostkiem
Bearerskopiowanym z nagłówka Authorization. - Sekret - tylko dla HS256, HS384 i HS512. Puste pole = samo dekodowanie.
- Format sekretu - zwykły tekst albo base64url, jeśli aplikacja dekoduje klucz z Base64 do bajtów (tak jak pole
kw kluczu JWK, RFC 7518). - Sprawdź na chwilę - puste pole = teraz. Inna data pokazuje, czy token był ważny w momencie błędu z logu.
Z czego składa się token i jak liczony jest podpis
podpis HS256 = HMAC-SHA256(sekret, "BASE64URL(nagłówek).BASE64URL(payload)")
Base64url to Base64 z dwoma znakami zamienionymi na bezpieczne w adresie: - zamiast + i _ zamiast / (RFC 4648, sekcja 5). RFC 7515 każe dodatkowo usunąć końcowe znaki =. Podpisywany jest dokładnie tekst dwóch pierwszych części z kropką, a nie sformatowany JSON, więc zmiana jednej spacji w payloadzie daje inny podpis.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 to po zdekodowaniu {"alg":"HS256","typ":"JWT"}. Stąd bierze się charakterystyczny początek eyJ: tak w base64url zaczyna się obiekt JSON, którego pierwszy klucz zaczyna się od litery.
{"sub":"42","name":"Anna","iat":1700000000,"exp":1700003600} ma exp - iat = 3 600 sekund, więc token żyje 1 godzinę. Obie wartości to NumericDate, czyli sekundy od 1 stycznia 1970 UTC (RFC 7519); dekoder zamienia je na datę i godzinę w czasie polskim.
tajny-klucz-testowy-o-dlugosci-32B! (35 bajtów) ma podpis Vdpa3BoQqFgR6SmAZ-klGiOSg6x-Po0b5FUftEdbWTQ i dekoder pokazuje „poprawny”. Zmiana ostatniego znaku sekretu na ? daje 5BDVFifCkjC5bqwYHnA11l9gxU4MFJPeOfSkWW3ud_8, czyli „NIEPOPRAWNY”, a obok podpis policzony z wpisanym sekretem do porównania.
Co zyskujesz przy typowych problemach z tokenem
Najczęstsze sytuacje przy debugowaniu logowania i API. Środkowa kolumna to to, co widać bez narzędzia, prawa to odpowiedź z wyniku dekodera.
| Sytuacja | Bez dekodera | Z dekoderem |
|---|---|---|
| API zwraca 401 | sam kod błędu | „wygasł 12 min temu” albo „podpis NIEPOPRAWNY” |
| Token działa u jednych, u innych nie | zgadywanie | pole aud z listą odbiorców i iss wydawcy |
| „Token jeszcze nieważny” | liczba w nbf | data „ważny od” i ostrzeżenie o iat w przyszłości (rozjechany zegar) |
| Data wygaśnięcia za kilkadziesiąt tysięcy lat | dziwna liczba | „wygląda na milisekundy”, bo NumericDate to sekundy |
| Podpis nie przechodzi mimo dobrego sekretu | brak wskazówki | przełącz format sekretu: base64url, jeśli aplikacja dekoduje klucz z Base64, inaczej zwykły tekst |
| Przegląd bezpieczeństwa | trzeba czytać kod | ostrzeżenie o alg: none, braku exp i sekrecie krótszym niż wymaga RFC 7518 |
Tabela referencyjna: claimy i algorytmy
Zarejestrowane pola payloadu z RFC 7519 (sekcja 4.1) i algorytmy z RFC 7518 (sekcja 3.1). Wszystkie pola są opcjonalne; o tym, które są wymagane, decyduje aplikacja.
| Pole | Nazwa w RFC | Co zawiera |
|---|---|---|
iss | Issuer | kto wystawił token |
sub | Subject | kogo dotyczy, zwykle identyfikator użytkownika |
aud | Audience | odbiorca albo lista odbiorców; serwer spoza listy musi odrzucić token |
exp | Expiration Time | od tej chwili token jest nieważny |
nbf | Not Before | wcześniej token jest nieważny |
iat | Issued At | kiedy wystawiono, pozwala policzyć wiek tokenu |
jti | JWT ID | unikalny identyfikator, np. do blokowania użytych tokenów |
| alg | Podpis | RFC 7518 | Sprawdzisz tutaj |
|---|---|---|---|
HS256 | HMAC z SHA-256, klucz min. 256 bitów | Required | tak, sekretem |
HS384 / HS512 | HMAC z SHA-384 / SHA-512, klucz min. 384 / 512 bitów | Optional | tak, sekretem |
RS256 | RSA PKCS#1 v1.5 z SHA-256 | Recommended | tylko dekodowanie |
ES256 | ECDSA na krzywej P-256 | Recommended+ | tylko dekodowanie |
none | bez podpisu | Optional | ostrzeżenie: nie przyjmuj takiego tokenu |
Często pytacie o JWT
Powiązane narzędzia
Generator Cron
Wyrażenie crontab z listy albo rozbiór gotowego, po polsku i z najbliższymi terminami, także w noc zmiany czasu - Zobacz generator
Regex Tester
Wyrażenia regularne JavaScript z podświetleniem dopasowań, grupami, podmianą i ochroną przed ReDoS - Zobacz generator
Kodowanie Base64
Tekst na Base64 i base64url w obie strony, ten sam zapis co w częściach JWT - Zobacz generator
Generator SHA-256
Skrót i HMAC-SHA256 z dowolnego tekstu, np. podpisu webhooka - Zobacz generator
Formatowanie JSON
Walidacja i formatowanie payloadu przed zakodowaniem - Zobacz generator
Generator Haseł
Długi, losowy sekret do HS256 - Zobacz generator
Generator UUID/GUID
Unikalne identyfikatory, np. na wartość pola jti - Zobacz generator
Generator zweryfikowany przez zespół LiczGrupa.pl
Treść, wzory i wyniki zostały sprawdzone pod kątem poprawności i aktualności przez nasz zespół specjalistów.

Sprawdził: Krystian Szyszka