Dekoder JWT
Wklej JWT (trzy części zakodowane w base64url oddzielone kropkami), a dekoder pokaże nagłówek, ładunek i podpis, zdekodowane i ładnie sformatowane, wraz z wykrytym algorytmem, wygaśnięciem tokenu w twoim czasie lokalnym oraz tym, czy nbf (not-before), iat (issued-at) i exp (expiry) są spójne. Opcjonalna weryfikacja podpisu, jeśli masz sekret lub klucz publiczny.
Jak zdekodować JWT
-
1
Wklej token
Trzy ciągi base64url oddzielone `.` (nagłówek.ładunek.podpis).
-
2
Odczytaj zdekodowany nagłówek
Algorytm, typ, identyfikator klucza (`kid`). Algorytm mówi, jakiego typu klucza potrzebujesz do weryfikacji.
-
3
Odczytaj ładunek
Standardowe oświadczenia (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) plus dowolne niestandardowe oświadczenia, które wydaje twoja aplikacja.
-
4
Zweryfikuj (opcjonalnie)
Podaj sekret HMAC (dla HS256/384/512) lub klucz publiczny (dla RS256, ES256 itp.), by potwierdzić, że podpis jest prawidłowy.
Anatomia JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Każdy segment jest zakodowany w base64url (nie standardowym base64). Nagłówek to JSON taki jak {"alg":"HS256","typ":"JWT"}, ładunek to JSON taki jak {"sub":"1234567890","name":"Alice","iat":1600000000}, a podpis to podpis HMAC lub RSA header.payload.
Standardowe oświadczenia (RFC 7519)
| Oświadczenie | Nazwa | Uwagi |
|---|---|---|
iss |
Wydawca | Kto wystawił token |
sub |
Podmiot | Kogo dotyczy token |
aud |
Odbiorca | Dla kogo jest token |
exp |
Czas wygaśnięcia | Znacznik czasu Unix; odrzucany po tym czasie |
nbf |
Nie przed | Znacznik czasu Unix; odrzucany przed tym czasem |
iat |
Wystawiony o | Znacznik czasu Unix utworzenia tokenu |
jti |
Identyfikator JWT | Unikalny identyfikator dla list unieważnień |
Obsługiwane algorytmy
Wartość alg |
Typ klucza |
|---|---|
HS256/HS384/HS512 |
Współdzielony sekret HMAC |
RS256/RS384/RS512 |
Klucz publiczny RSA |
ES256/ES384 |
Klucz publiczny ECDSA |
PS256/PS384 |
Klucz publiczny RSA-PSS |
EdDSA / Ed25519 |
Krzywa Edwardsa |
none |
Nigdy temu nie ufaj, niepodpisane tokeny |
Pułapka alg: none
Wczesne biblioteki JWT dopuszczały tokeny "alg": "none" i naiwnie akceptowały je jako prawidłowe. Zawsze:
- Twórz białą listę algorytmów akceptowanych przez twoją aplikację.
- Odrzucaj
alg: nonebezwarunkowo. - Odrzucaj
alg: HS256, gdy twój kod weryfikacyjny oczekujeRS256(atak „pomylenia algorytmów”).
Czym JWT NIE jest
- Nie jest zaszyfrowany. Nagłówek i ładunek są zakodowane w base64, co trywialnie się dekoduje. Nigdy nie umieszczaj sekretów w JWT bez opakowania go w JWE.
- Domyślnie nie da się go unieważnić. Po wydaniu JWT jest prawidłowy aż do
exp. Do unieważnienia potrzebujesz czarnej listy albo krótkiego wygaśnięcia + tokenów odświeżania. - Nie jest zamiennikiem ciasteczka sesji w każdym przypadku użycia. Tokeny nieprzejrzyste przechowywane po stronie serwera są często prostsze i bezpieczniejsze.
Typowe błędy
- Ufanie nagłówkowi.
kidialgpochodzą z samego tokenu. Skompromitowany serwer może ustawić je dowolnie; zawsze waliduj względem stałej listy. - Ignorowanie odchylenia
nbfiiat. Dryf zegara oznacza, żeiat > nowmoże się zdarzyć. Pozwól na mały zapas (30-60s). - Logowanie całych JWT. Ładunek często zawiera identyfikatory użytkowników, e-maile, uprawnienia, dane osobowe, które nie powinny trafiać do stdout.
- Używanie HS256 ze słabym sekretem. 16-znakowy sekret da się złamać brutalnie w kilka minut. Użyj co najmniej 256 bitów losowej entropii.
Najczęściej zadawane pytania
Nie. Dekodowanie odbywa się w twojej przeglądarce. Token pozostaje lokalny, to ważne, bo JWT często zawierają dane sesji, identyfikatory użytkowników i uprawnienia.
Tak. Jeśli wkleisz współdzielony sekret HMAC lub klucz publiczny zakodowany w PEM, weryfikacja odbywa się w twojej przeglądarce. Klucz nigdy nie opuszcza twojej maszyny.
Oznacza, że token jest niepodpisany. Nigdy nie akceptuj takich tokenów na produkcji, można je trywialnie sfałszować. Kilka głośnych CVE dotyczyło właśnie bibliotek, które domyślnie akceptowały alg: none.
Podpisywanie JWT dowodzi autentyczności, a nie poufności. Nagłówek i ładunek są zakodowane w base64url, co jest odwracalne. Dla tajności użyj JWE (JSON Web Encryption) wokół JWT albo unikaj umieszczania wrażliwych danych w ładunku.
Powiązane narzędzia
Tabela ASCII
Pełna tabela ASCII od 0 do 127 z zapisem dziesiętnym, szesnastkowym, ósemkowym i binarnym oraz notacją numerycznych odwołań HTML, w tym kodami sterującymi NUL, LF i DEL.
Referencja znaków HTML
Przeszukiwalna lista encji HTML wraz z ich kodami nazwanymi i liczbowymi oraz kopiowaniem jednym kliknięciem specjalnych znaków i symboli.
Skróty klawiaturowe
Wyszukuj udokumentowane skróty domyślne VS Code, Chrome i Bash z GNU Readline w macOS, Windows i Linux.
Generator EditorConfig
Wygeneruj plik .editorconfig z własnymi regułami stylu i rozmiaru wcięć, końca linii, kodowania i białych znaków, aby uzyskać spójne formatowanie w różnych IDE i edytorach.
Walidator adresów e-mail
Zweryfikuj adres e-mail: sprawdzenie składni RFC 5322, sprawdzenie rekordu MX w czasie rzeczywistym oraz szczegóły dotyczące części lokalnej, domeny i długości. Żadna wiadomość nie jest wysyłana.
Formatowanie HTML
Formatuj HTML lokalnie w przeglądarce, używając wcięć dwóch lub czterech spacji. HTML nie jest wysyłany ani walidowany.
Narzędzie jest dostępne w innych językach
- Decodificador JWT [PT]
- Mã giải mã JWT [VI]
- Décodeur JWT [FR]
- مُفكّك JWT [AR]
- JWT-avkodare [SV]
- JWT 해독기 [KO]
- ตัวถอดรหัส JWT [TH]
- JWT-Dekoder [DE]
- Decodificador JWT [ES]
- Decoder JWT [ID]
- JWT-decoder [NL]
- JWTデコーダ [JA]
- JWT 解码器 [ZH]
- JWT Decoder [EN]
- Decoder JWT [IT]
- Декодировщик JWT [RU]
- JWT Dekoderi [TR]