Wybierz język

Dekoduj i analizuj tokeny JWT w przeglądarce

Dekoduj tokeny JWT lokalnie w przeglądarce. Zobacz nagłówek i payload w formacie JSON oraz czytelne daty wygaśnięcia (exp). Tokeny nie opuszczają komputera.

Mehmet Demiray Opublikowano Zaktualizowano
Udostępnij
Konwertuj claimy exp, iat i nbf na czytelne daty

Budowa tokenu JWT: Co kryje się w środku?

Token JWT (JSON Web Token) na pierwszy rzut oka wygląda jak losowy ciąg znaków. W rzeczywistości ma on bardzo konkretną strukturę, składającą się z trzech części oddzielonych kropkami: nagłówek.ładunek.sygnatura. Każda z tych części jest zakodowana przy użyciu Base64URL, wariantu kodowania Base64 bezpiecznego dla adresów URL. Nasz Dekoder JWT pozwala zajrzeć do wnętrza dwóch pierwszych części bez potrzeby znajomości tajnego klucza.

  1. Nagłówek (Header): To pierwsza część tokenu. Jest to obiekt JSON, który zawiera metadane o samym tokenie. Zazwyczaj znajdziemy tu dwie kluczowe informacje: typ (typ tokenu, prawie zawsze „JWT”) oraz alg (algorytm użyty do wygenerowania sygnatury, np. HS256 lub RS256). Nagłówek informuje serwer, jak powinien zweryfikować autentyczność tokenu.
  2. Ładunek (Payload): Druga część, również będąca obiektem JSON. To serce tokenu, w którym przechowywane są tzw. „claims” (oświadczenia). Są to informacje o użytkowniku (np. jego ID, rola) oraz dodatkowe metadane, takie jak data wygaśnięcia tokenu (exp) czy jego wystawca (iss). To właśnie zawartość ładunku jest najczęściej analizowana podczas debugowania.
  3. Sygnatura (Signature): Ostatnia część, która służy do weryfikacji integralności tokenu. Jest tworzona przez połączenie zakodowanego nagłówka, zakodowanego ładunku, tajnego klucza (w przypadku algorytmów symetrycznych jak HS256) lub klucza prywatnego (dla algorytmów asymetrycznych jak RS256) i przepuszczenie całości przez wybrany algorytm haszujący. Dekodowanie nie wymaga sygnatury, ale jej weryfikacja jest kluczowa dla bezpieczeństwa. Możesz dowiedzieć się więcej o kodowaniu Base64, korzystając z naszego narzędzia do dekodowania Base64.

Standardowe „claims” w JWT: Słownik dewelopera

Ładunek (payload) tokenu JWT przenosi oświadczenia, czyli „claims”. Są to informacje o podmiocie (zazwyczaj użytkowniku) i dodatkowe metadane. Istnieje zestaw standardowych, zarejestrowanych oświadczeń, które mają z góry zdefiniowane znaczenie. Dekoder JWT nie tylko je wyświetla, ale także konwertuje znaczniki czasu na czytelny format daty i godziny. Oto najważniejsze z nich:

iss (Issuer): Identyfikator wystawcy tokenu. Zazwyczaj jest to adres URL serwera, który wygenerował token, np. https://api.mojserwis.pl. sub (Subject): Identyfikator podmiotu, którego dotyczy token. Najczęściej jest to unikalny identyfikator użytkownika w systemie, np. 1234567890 lub adres e-mail. aud (Audience): Określa odbiorcę (lub odbiorców), dla którego token jest przeznaczony. Dzięki temu można zapewnić, że token wydany dla usługi A nie zostanie zaakceptowany przez usługę B. Przykład: https://api.mojanowausluga.com. exp (Expiration Time): Czas wygaśnięcia tokenu, podany jako znacznik czasu Unix (liczba sekund od 1 stycznia 1970). Po tej dacie token staje się nieważny. Dekoder JWT automatycznie pokaże Ci dokładną datę i godzinę, np. 1672531199 zostanie wyświetlone jako „31 grudnia 2022, 23:59:59”. nbf (Not Before): Czas, przed którym token nie powinien być akceptowany, również w formacie znacznika czasu Unix. Przydatne, gdy chcemy wydać token, który stanie się aktywny dopiero w przyszłości. iat (Issued At): Czas wystawienia tokenu. Pozwala określić wiek tokenu. * jti (JWT ID): Unikalny identyfikator tokenu. Pomaga zapobiegać ponownemu użyciu tokenu (replay attacks), jeśli system przechowuje listę już wykorzystanych identyfikatorów.

Oprócz standardowych oświadczeń, w ładunku można umieszczać dowolne, własne dane, takie jak role użytkownika (roles: ["admin", "editor"]) czy dodatkowe uprawnienia. Po zdekodowaniu, warto sprawdzić poprawność struktury JSON za pomocą formatera JSON.

Dekodowanie a weryfikacja JWT: Kluczowa różnica dla bezpieczeństwa

W świecie JWT terminy „dekodowanie” i „weryfikacja” są często mylone, a zrozumienie różnicy między nimi jest absolutnie kluczowe dla bezpieczeństwa aplikacji. Nasze narzędzie, Dekoder JWT, jak sama nazwa wskazuje, zajmuje się wyłącznie dekodowaniem.

Dekodowanie to proces odczytywania zawartości tokenu. Ponieważ nagłówek i ładunek JWT są jedynie zakodowane w formacie Base64URL, a nie zaszyfrowane, każdy, kto wejdzie w posiadanie tokenu, może je zdekodować i odczytać zawarte w nich informacje. To tak, jakby odczytać list napisany w powszechnie znanym kodzie – nie potrzeba do tego żadnego sekretu. Dekodowanie jest przydatne do celów diagnostycznych, na przykład do sprawdzenia daty ważności tokenu czy uprawnień użytkownika.

Weryfikacja to natomiast proces sprawdzania autentyczności i integralności tokenu. Polega on na użyciu sygnatury (trzeciej części JWT) do potwierdzenia, że: 1. Token został podpisany przez zaufanego wystawcę (posiadającego odpowiedni klucz tajny lub prywatny). 2. Zawartość nagłówka i ładunku nie została zmieniona po podpisaniu tokenu.

Aby zweryfikować token, serwer musi znać sekret (dla algorytmów symetrycznych jak HS256) lub posiadać klucz publiczny (dla algorytmów asymetrycznych jak RS256). Bez tego kroku nie można ufać informacjom zawartym w tokenie. Złośliwy użytkownik mógłby zdekodować token, zmienić swoje ID użytkownika w ładunku na ID administratora, a następnie ponownie go zakodować. Bez weryfikacji sygnatury, taka manipulacja pozostałaby niewykryta.

Pamiętaj: Dekoder JWT pokazuje, co jest w środku, ale nie mówi, czy można tym informacjom ufać. Weryfikacja zawsze musi odbywać się po stronie serwera.

Debugowanie problemów z autoryzacją przy użyciu Dekodera JWT

Każdy deweloper pracujący z API spotkał się z błędem 401 Unauthorized lub 403 Forbidden. Często przyczyną jest problem z tokenem JWT. Dekoder JWT to nieocenione narzędzie w arsenale dewelopera, pozwalające szybko zdiagnozować źródło kłopotów, bez konieczności grzebania w logach serwera. Oto typowy scenariusz debugowania:

  1. Skopiuj token: Kiedy twoja aplikacja otrzymuje błąd autoryzacji, pierwszym krokiem jest zdobycie problematycznego tokenu. Zazwyczaj znajdziesz go w nagłówku Authorization żądania HTTP (np. Bearer ey...).
  2. Wklej i zdekoduj: Wklej cały ciąg znaków do Dekodera JWT. Narzędzie natychmiast rozłoży go na nagłówek i ładunek, prezentując je w czytelnym formacie JSON.
  3. Sprawdź datę wygaśnięcia (exp): To najczęstszy winowajca. Czy token po prostu wygasł? Nasze narzędzie automatycznie przeliczy znacznik czasu na zrozumiałą datę i godzinę, co pozwala błyskawicznie to zweryfikować.
  4. Zweryfikuj odbiorcę (aud) i wystawcę (iss): Czy token jest przeznaczony dla właściwego API? W środowiskach z wieloma mikroserwisami łatwo o pomyłkę, gdzie token dla usługi user-service jest wysyłany do product-service. Sprawdź, czy wartości aud i iss zgadzają się z konfiguracją serwera.
  5. Przeanalizuj nbf i iat: Rzadziej, ale przyczyną problemów może być rozbieżność zegarów między serwerem wydającym token a serwerem go weryfikującym. Jeśli token ma ustawioną datę nbf (Not Before) w przyszłości z perspektywy serwera docelowego, zostanie odrzucony.
  6. Sprawdź niestandardowe oświadczenia: Czy w ładunku znajdują się odpowiednie role, uprawnienia lub inne dane wymagane przez endpoint, do którego próbujesz uzyskać dostęp? Może użytkownikowi brakuje roli admin, a próbuje wykonać operację administracyjną.

Dzięki takiemu szybkiemu wglądowi w zawartość tokenu, można zaoszczędzić godziny frustrującego debugowania.

Czy wklejanie tokenów produkcyjnych jest bezpieczne?

Pytanie o bezpieczeństwo jest kluczowe, zwłaszcza gdy mamy do czynienia z danymi produkcyjnymi, takimi jak tokeny autoryzacyjne. Odpowiedź brzmi: używanie naszego narzędzia Dekoder JWT jest bezpieczne, a oto dlaczego.

Cała operacja dekodowania tokenu odbywa się wyłącznie w Twojej przeglądarce. Kiedy wklejasz token do pola tekstowego, kod JavaScript uruchomiony na tej stronie lokalnie przetwarza dane. Token JWT nigdy nie jest wysyłany przez sieć na żaden serwer zewnętrzny, w tym na serwery Callculation. Działamy w 100% po stronie klienta.

Możesz to łatwo zweryfikować, korzystając z narzędzi deweloperskich w swojej przeglądarce (zazwyczaj klawisz F12). W zakładce „Sieć” (Network) zobaczysz, że po wklejeniu tokenu nie jest wykonywane żadne nowe żądanie sieciowe. Dane pozostają na Twoim komputerze.

To odróżnia nasze narzędzie od niektórych innych dostępnych online, które mogą wysyłać wprowadzone dane na swoje serwery w celu ich przetworzenia. W takim przypadku nie masz pewności, co dzieje się z Twoim tokenem – czy jest logowany, przechowywany lub w jakikolwiek inny sposób wykorzystywany.

Oczywiście, podstawowe zasady bezpieczeństwa cyfrowego nadal obowiązują. Upewnij się, że Twój komputer jest wolny od złośliwego oprogramowania, takiego jak keyloggery czy programy przechwytujące zawartość schowka. Jednak przy założeniu, że Twoje środowisko pracy jest bezpieczne, możesz bez obaw wklejać tokeny produkcyjne do naszego Dekodera JWT, wiedząc, że pozostają one poufne i nigdy nie opuszczają Twojej maszyny. To idealne rozwiązanie do szybkiego i bezpiecznego debugowania w codziennej pracy.

Dlaczego mój token JWT nie chce się zdekodować?

Wklejasz token do Dekodera JWT, ale zamiast czytelnych obiektów JSON widzisz komunikat o błędzie. Co mogło pójść nie tak? Oto najczęstsze przyczyny problemów z dekodowaniem i sposoby ich rozwiązania.

1. Nieprawidłowa struktura tokenu: Prawidłowy JWT składa się z trzech części oddzielonych dwiema kropkami (nagłówek.ładunek.sygnatura). Jeśli w skopiowanym ciągu brakuje kropek lub jest ich inna liczba, dekoder zgłosi błąd. Upewnij się, że skopiowałeś cały token. Czasami tokeny są przekazywane w nagłówku HTTP z prefiksem Bearer , którego nie należy wklejać do dekodera. 2. Błędy w kodowaniu Base64URL: Każda z części tokenu (przed sygnaturą) musi być poprawnym ciągiem znaków w formacie Base64URL. Ten format różni się od standardowego Base64 – używa znaków - zamiast + i _ zamiast / oraz nie stosuje dopełnienia (=). Błąd w tym miejscu może wynikać z: Niekompletne skopiowanie: Token został ucięty w trakcie kopiowania. Białe znaki: Przypadkowe spacje lub znaki nowej linii na początku lub na końcu ciągu. * Nieprawidłowe znaki: W tokenie znalazły się znaki, które nie należą do alfabetu Base64URL. 3. To nie jest JWT: Ciąg znaków może wyglądać jak token, ale w rzeczywistości być czymś zupełnie innym, na przykład nieprzezroczystym (opaque) tokenem sesji lub kluczem API. Takie identyfikatory nie mają struktury JWT i nie da się ich zdekodować w ten sposób. 4. Uszkodzony JSON: Nawet jeśli dekodowanie Base64URL się powiedzie, zawartość nagłówka lub ładunku może nie być poprawnym formatem JSON. Może to być spowodowane błędem w bibliotece generującej token po stronie serwera. Możesz spróbować zdekodować poszczególne części tokenu za pomocą narzędzia do dekodowania Base64, a następnie wkleić wynik do formatera JSON, aby sprawdzić jego poprawność.

Przede wszystkim, dokładnie sprawdź, czy skopiowałeś token w całości i bez żadnych dodatkowych znaków. W większości przypadków to właśnie prosty błąd przy kopiowaniu jest źródłem problemu.

Najczęściej zadawane pytania.

Czy dekodowanie JWT to to samo co jego weryfikacja?

Nie, to dwa różne procesy. Dekodowanie, które wykonuje nasz Dekoder JWT, polega jedynie na odczytaniu jawnych danych z nagłówka i ładunku tokenu – to jak otworzenie listu. Weryfikacja natomiast sprawdza, czy podpis cyfrowy tokenu jest prawidłowy, używając do tego tajnego klucza. To jak sprawdzenie, czy pieczęć na liście nie została złamana i pochodzi od właściwego nadawcy. Nasze narzędzie nie weryfikuje podpisów.

Jak mogę sprawdzić, kiedy wygasa mój token?

Wklej cały token do pola tekstowego w narzędziu Dekoder JWT. W zdekodowanym ładunku (payload) znajdź pole o nazwie exp. Nasze narzędzie automatycznie przetłumaczy jego wartość (timestamp) na czytelną dla człowieka datę i godzinę wygaśnięcia tokenu.

Czy wklejanie tutaj produkcyjnego tokenu JWT jest bezpieczne?

Tak, jest to w pełni bezpieczne. Cały proces dekodowania odbywa się lokalnie, w Twojej przeglądarce internetowej. Żadne dane, w tym wklejony token, nigdy nie są wysyłane na nasze serwery ani nigdzie indziej w internecie. Twoje dane pozostają wyłącznie na Twoim komputerze.

Dlaczego dekoder pokazuje błąd przy próbie odczytania mojego tokenu?

Najczęstsze przyczyny to niekompletny lub uszkodzony token. Upewnij się, że skopiowałeś całą jego zawartość, która składa się z trzech części oddzielonych kropkami (nagłówek.ładunek.podpis). Błąd może również wynikać z nieprawidłowego kodowania Base64url w jednej z części tokenu. Spróbuj użyć naszego narzędzia do dekodowania Base64, aby sprawdzić poszczególne segmenty.

Czym się różni nagłówek (header) od ładunku (payload) w JWT?

Nagłówek (header) zawiera metadane o samym tokenie, takie jak typ tokenu (typ, zazwyczaj "JWT") oraz algorytm użyty do jego podpisania (alg, np. "HS256"). Ładunek (payload) to właściwa treść, czyli zbiór „oświadczeń” (claims) na temat podmiotu (np. ID użytkownika, role) oraz samego tokenu (np. czas wygaśnięcia). Obie części są w formacie JSON, który możesz sformatować za pomocą naszego formatera JSON.

Czy do użycia tego dekodera potrzebny jest tajny klucz?

Nie. Tajny klucz (secret) jest niezbędny wyłącznie do weryfikacji podpisu tokenu lub do tworzenia nowych tokenów. Dekodowanie polega jedynie na odczytaniu publicznie dostępnych informacji z nagłówka i ładunku, które są zakodowane w formacie Base64url. Każdy, kto posiada token, może go zdekodować.

Co oznaczają skróty `iss`, `sub`, `aud` i `exp` w ładunku tokenu?

Są to standardowe, zarejestrowane „oświadczenia” (claims) zdefiniowane w specyfikacji JWT. iss (issuer) oznacza wystawcę tokenu, sub (subject) identyfikuje podmiot, którego token dotyczy (np. ID użytkownika), aud (audience) określa odbiorcę, dla którego token jest przeznaczony, a exp (expiration time) to czas, po którym token staje się nieważny.