Skip to main content

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.

  1. JSON nagłówka: {"alg":"HS256","typ":"JWT"}
  2. kodujemy Base64: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  3. zwróć uwagę, że końcowe = jest usuwane — JWT zawsze je pomija
  4. ładunek {"sub":"1234567890","iat":1516239022}
  5. 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.