Czym jest JSON Web Token?
JSON Web Token (JWT) to zwarta, bezpieczna dla URL koperta zawierająca niewielki ładunek roszczeń. Jest to standardowy format poświadczeń dla bezstanowych sesji webowych, tokenów ID OAuth/OIDC, uwierzytelniania API typu maszyna-maszyna oraz podpisanych magicznych linków. JWT zawsze składa się z trzech segmentów base64url połączonych kropkami: nagłówek.ładunek.podpis. Nagłówek i ładunek to JSON; podpis to binarny kod MAC lub podpis cyfrowy obliczony nad pierwszymi dwoma segmentami.
Jak działają JWT?
Gdy to narzędzie dekoduje token, podąża tą samą trzyetapową ścieżką, którą stosuje każda biblioteka JWT:
- Podziel token na kropkach na dokładnie trzy niepuste segmenty. Każda inna postać jest nieprawidłowa.
- Zdekoduj segmenty 0 i 1 z base64url, a następnie wykonaj
JSON.parsena każdym z nich. Nagłówek niesie algorytm (alg) i typ tokena (typ). Ładunek niesie roszczenia (sub,exp,iat, klucze niestandardowe). - Jeśli podano sekret, ponownie oblicz MAC nad
<segment0>.<segment1>za pomocą algorytmu z nagłówka. Porównaj bajty z trzecim segmentem. - Pokaż wynik weryfikacji obok zdekodowanych roszczeń, łącznie z czytelnym dla człowieka wskaźnikiem wygaśnięcia obliczonym z roszczenia
exp.
Dlaczego dekodować JWT w przeglądarce?
Wklejenie prawdziwego, używanego JWT do zdalnego debuggera ujawnia poświadczenie w logach tej usługi, jej stosie obserwowalności i u każdego partnera, do którego usługa wysyła dane. Nawet gdy zewnętrzna strona twierdzi, że nie loguje tokenów, nie masz sposobu, by to zweryfikować. To narzędzie powstało po to, byś nigdy nie musiał iść na taki kompromis:
- Zero sieci: środowisko wykonawcze nie ma wywołań
fetch,XMLHttpRequestanisendBeacon. Otwórz DevTools podczas dekodowania i weryfikacji — panel Sieć pozostaje cichy. - Natywne Web Crypto: weryfikacja HMAC korzysta z
crypto.subtle.importKeyicrypto.subtle.sign, czyli tych samych prymitywów, które wywołałoby Twoje środowisko wykonawcze. - Statyczny deploy: każda strona to pojedynczy statyczny plik HTML bez żadnego punktu końcowego na serwerze, który można by skompromitować. Nie ma tokenu do wycieku, ponieważ nie ma serwera, do którego mógłby wyciec.
Co to narzędzie weryfikuje, a czego nie?
Wersja 1 tego narzędzia weryfikuje wyłącznie podpisy z rodziny HMAC-SHA. Konkretnie:
- Obsługiwane: HS256, HS384, HS512. Podaj współdzielony sekret, a narzędzie ponownie obliczy i porówna MAC.
- Jeszcze nieobsługiwane: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA oraz PS256/384/512 (RSA-PSS). Wymagają one klucza publicznego w formacie PEM lub JWK i celowo są odłożone do kolejnego wydania.
- Odrzucone:
alg: "none". Narzędzie dekoduje token, ale jawnie oznacza go jako niebezpieczny — żadna walidacja podpisu nie jest wykonywana, a każdy produkcyjny system, który akceptuje taki token, ma poważną podatność.
Jak wygląda przykład dekodowania JWT?
Wklej kanoniczny przykładowy token z RFC 7519 do pola wejściowego powyżej:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Nagłówek dekoduje się do {"alg":"HS256","typ":"JWT"}, a ładunek do {"sub":"1234567890","name":"John Doe","iat":1516239022}. Wprowadź your-256-bit-secret w panelu weryfikacji, a sprawdzenie podpisu zwróci wynik prawidłowy. Zmień jeden znak sekretu, a zwróci nieprawidłowy. Nic z tego nie opuszcza Twojej przeglądarki.
To dekoder JWT, którego brakowało nam wtedy, gdy musieliśmy debugować token na produkcji: szanujący prywatność, szybki i zbudowany na tych samych prymitywach, których używa środowisko wykonawcze.