Dekoduj token JSON Web Token i zobacz nagłówek oraz ładunek.
Wszystkie obliczenia wykonywane są lokalnie w przeglądarce. Dane nie są wysyłane na serwer.
Wyniki mają charakter informacyjny. Potwierdź je w innych źródłach.
Jak czytać token JWT
JWT to trzy segmenty Base64url połączone kropkami: nagłówek mówiący, jak token podpisano, ładunek z oświadczeniami i podpis obejmujący dwa pierwsze segmenty. Dekodowanie pokazuje, co token twierdzi. Nie mówi, czy to prawda.
Jak to działa
- Dzieli token na dwóch kropkach na nagłówek, ładunek i podpis.
- Dekoduje z Base64url dwa pierwsze segmenty z powrotem do JSON-a i formatuje je do czytania.
- Pokazuje standardowe oświadczenia czasowe — exp, iat, nbf — jako daty, bo zapisane są jako sekundy uniksowe.
- Nie rusza podpisu: jego weryfikacja wymaga sekretu lub klucza publicznego wystawcy, którego nigdy nie należy wklejać na stronę WWW.
token = base64url(nagłówek) . base64url(ładunek) . base64url(podpis) podpis = HMAC albo RSA/ECDSA po dwóch pierwszych segmentach exp/iat = sekundy od 1970-01-01T00:00:00Z (nie milisekundy)
Przykład z liczbami
Nagłówek niemal każdego istniejącego tokenu HS256, rozłożony ręcznie.
- JSON nagłówka: {"alg":"HS256","typ":"JWT"}
- kodujemy Base64: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- zwróć uwagę, że końcowe = jest usuwane — JWT zawsze je pomija
- ładunek {"sub":"1234567890","iat":1516239022}
- 1516239022 sekund → 2018-01-18T01:30:22Z
Odkodowany token mówi, że podpisano go HMAC-SHA256, dotyczy podmiotu 1234567890 i wystawiono go 18 stycznia 2018. Czy jest prawdziwy, to osobne pytanie, na które odpowiada podpis.
Jak czytać wynik
- Dekodowanie to nie weryfikacja. Token, którego ładunek mówi admin: true, niczego nie dowodzi, dopóki podpis nie zgodzi się z kluczem, któremu ufasz. Nigdy nie podejmuj decyzji autoryzacyjnej na podstawie samego odkodowanego ładunku.
- Nie wklejaj produkcyjnych tokenów do dekoderów online. Ten działa w całości w Twojej przeglądarce i niczego nie wysyła, ale nie dotyczy to każdej takiej strony, a token bearer jest hasłem.
- Ładunek jest tylko zakodowany, nie zaszyfrowany. Każdy, kto ma token, przeczyta wszystkie oświadczenia — nigdy nie umieszczaj w nim sekretu.
- Sprawdzaj exp względem bieżącego czasu i odrzucaj przeterminowane. Sprawdzaj też iss i aud — poprawny podpis od niewłaściwego wystawcy to wciąż niewłaściwy token.
- alg: none to realna wartość i realny atak. Weryfikator ufający wyborowi algorytmu z nagłówka można poinstruować, żeby w ogóle nie weryfikował.
Częste pytania
- Czy to narzędzie powie mi, czy mój token jest ważny?
- Nie, i żaden dekoder tego nie zrobi bez Twojego klucza. Pokazuje, co token twierdzi. Ważność oznacza, że podpis się zgadza, token nie wygasł, a wystawca i odbiorca są tymi, których oczekujesz — te kontrole należą do serwera i do biblioteki.
- Czy bezpiecznie jest wkleić tu mój token?
- Ta strona dekoduje w przeglądarce i niczego nie przesyła. Mimo to bezpieczny nawyk to używanie tokenów ze środowiska testowego. Token dający realny dostęp traktuj jak hasło.
- Dlaczego moja data exp wypada w 1970 roku?
- Niemal na pewno podajesz milisekundy tam, gdzie specyfikacja wymaga sekund. Date.now() w JavaScripcie zwraca milisekundy; podziel przez 1000, zanim wstawisz wartość do oświadczenia.