Dekoder JWT

Wklej JSON Web Token, aby zobaczyć nagłówek i ładunek jako sformatowany JSON, czasy exp, iat i nbf jako daty oraz informację, czy token wygasł. Podpis można zweryfikować lokalnie za pomocą klucza tajnego lub klucza publicznego.

Nagłówek

Ładunek

Oświadczenia

Podpis

Weryfikuj podpis

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wklej cały token: trzy części Base64URL oddzielone kropkami.
  2. Odczytaj zdekodowany nagłówek i ładunek. Oświadczenia exp, iat i nbf są wyświetlane jako daty, a gdy token wygasł lub nie jest jeszcze ważny, pojawia się ostrzeżenie.
  3. Aby zweryfikować podpis, rozwiń sekcję „Weryfikuj podpis” i wpisz wspólny klucz tajny dla HS256, HS384 lub HS512 albo wklej klucz publiczny PEM dla algorytmów RS, PS lub ES.
  4. Sprawdź, czy oświadczenia określające wystawcę, odbiorcę i podmiot odpowiadają temu, czego oczekuje aplikacja.

Budowa tokena JWT

JSON Web Token (RFC 7519) składa się z trzech części oddzielonych kropkami: header.payload.signature. Nagłówek i ładunek to obiekty JSON zakodowane jako Base64URL bez dopełnienia, dlatego tokeny prawie zawsze zaczynają się od eyJ, czyli zakodowanej postaci otwierającego {". Podpis jest obliczany na podstawie dwóch pierwszych części, dokładnie w takiej postaci, w jakiej występują w tokenie.

  • Nagłówek: algorytm podpisu w polu alg, zwykle "typ": "JWT", a często także kid, który wskazuje klucz.
  • Ładunek: oświadczenia, np. kim jest użytkownik, kto wystawił token i kiedy token wygasa.
  • Podpis: podpis HMAC, RSA lub ECDSA potwierdzający, że nagłówek i ładunek nie zostały zmienione.

Token składający się z pięciu części to zaszyfrowany JWE; jego zawartości nie da się odczytać bez klucza deszyfrującego.

Zarejestrowane oświadczenia

OświadczenieNazwaZnaczenie
issWystawca (Issuer)Kto utworzył i podpisał token
subPodmiot (Subject)Kogo dotyczy token, zwykle identyfikator użytkownika
audOdbiorca (Audience)Usługa, dla której token jest przeznaczony
expCzas wygaśnięcia (Expiration time)Po tej chwili token musi zostać odrzucony
nbfNie wcześniej niż (Not before)Przed tą chwilą token musi zostać odrzucony
iatCzas wystawienia (Issued at)Kiedy token został utworzony
jtiIdentyfikator JWT (JWT ID)Unikatowy identyfikator służący do wykrywania ponownego użycia tokena

Czasy są wartościami typu NumericDate: to liczba sekund (a nie milisekund) od 1 stycznia 1970 r. UTC. Dekoder wyświetla je jako czytelne daty i porównuje z zegarem urządzenia.

Dekodowanie to nie weryfikacja

Każdy może zdekodować JWT, ponieważ ładunek jest tylko zakodowany, a nie zaszyfrowany; nigdy nie umieszczaj w nim haseł ani innych tajnych danych. Zaufanie daje wyłącznie sprawdzenie podpisu właściwym kluczem, a serwer przyjmujący tokeny powinien ponadto:

  • dopuszczać tylko oczekiwany algorytm i odrzucać "alg": "none", co oznacza token bez podpisu;
  • nigdy nie pozwalać, by nagłówek tokena decydował o wyborze między HMAC a RSA, bo wtedy atakujący może podpisać sfałszowany token, używając klucza publicznego serwera jako klucza tajnego HMAC;
  • sprawdzać exp, nbf, iss i aud przy każdym żądaniu.

Opcjonalna weryfikacja na tej stronie korzysta z interfejsu Web Crypto API wbudowanego w przeglądarkę. Dekodowanie i weryfikacja odbywają się na urządzeniu i nic nie jest wysyłane. Ogólna zasada: nigdy nie wklejaj produkcyjnych kluczy podpisujących ani aktywnych tokenów na stronach, którym nie ufasz.

Najczęściej zadawane pytania

Czy wklejanie JWT do tego dekodera jest bezpieczne?

Token jest dekodowany i weryfikowany przez JavaScript w przeglądarce i nigdy nie trafia na serwer. Pamiętaj jednak, że token, który nie wygasł, działa jak hasło dla każdego, kto go posiada, dlatego przy udostępnianiu zrzutów ekranu lub logów lepiej używać tokenów testowych albo wygasłych.

Czy można zdekodować JWT bez klucza tajnego?

Tak. Nagłówek i ładunek to zwykły JSON zakodowany w Base64URL, więc można je odczytać bez żadnego klucza. Klucz tajny lub publiczny jest potrzebny tylko do weryfikacji podpisu.

Dlaczego dekoder pokazuje, że token wygasł?
Jego oświadczenie exp wskazuje moment wcześniejszy niż bieżący czas na urządzeniu. Jeśli token powinien być nadal ważny, sprawdź zegar systemowy oraz czas życia tokena skonfigurowany przez wystawcę.
Które algorytmy podpisu można zweryfikować?

HS256, HS384 i HS512 ze wspólnym kluczem tajnym oraz RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 i ES512 z kluczem publicznym w formacie PEM.

Co oznacza "alg": "none"?

Oznacza niezabezpieczony token JWT z pustym podpisem, zdefiniowany w RFC 7518. Każdy może utworzyć lub zmienić taki token, dlatego serwer oczekujący podpisanych tokenów musi go zawsze odrzucać.