Kodowanie

JWT Encoder/Decoder

Kodowanie i dekodowanie tokenów JWT — nagłówek, payload, podpis HMAC i standardowe pola.

A JWT (JSON Web Token) is a compact format for transmitting signed data, made of three dot-separated parts: a header, a payload, and a signature. This tool decodes any JWT and shows all three parts, and can also build a new token signed with HMAC.

Decoding does not verify the signature — reading a token's contents needs no secret key. Verifying the signature only matters when you need to trust the token as genuine.

How to use it

Common uses

Things to keep in mind

A JWT is not encrypted, only Base64URL-encoded — anyone can read the payload. Never put passwords or other secrets in it.

The signature protects against tampering, not against being read. For confidentiality you need extra encryption (JWE) or an HTTPS transport.

Artykuł o tym narzędziu: JWT: budowa tokenu i co znaczy „dekodowanie" JWT

Najczęstsze pytania

Czy zdekodowanie JWT dowodzi, że token jest autentyczny?

Nie. Samo dekodowanie odczytuje header i payload zakodowane w Base64URL, ale nie weryfikuje podpisu. Aby potwierdzić, że token nie został sfałszowany, trzeba podać właściwy secret lub klucz publiczny i sprawdzić podpis osobno.

Czy secret lub klucz prywatny opuszcza przeglądarkę?

Nie, całe kodowanie, dekodowanie i podpisywanie odbywa się lokalnie w przeglądarce przez Web Crypto API — secret i wygenerowane klucze nigdy nie są wysyłane na serwer.

Co oznaczają standardowe pola jak exp czy iat?

To zarejestrowane claims z payloadu: exp to czas wygaśnięcia tokenu, nbf — moment, od którego jest ważny, iat — czas wystawienia, a iss, sub, aud i jti opisują odpowiednio wystawcę, podmiot, odbiorców i unikalny identyfikator tokenu.

Czym jest atak polegający na podmianie algorytmu na "none"?

Jeśli backend naiwnie ufa polu alg z nagłówka tokenu, atakujący może zamienić je na none, usunąć podpis — i token z dowolnymi danymi przejdzie weryfikację. Solidne biblioteki wymagają jawnego wskazania oczekiwanego algorytmu podczas weryfikacji.

Dlaczego nie warto przechowywać JWT w localStorage dla wrażliwych sesji?

localStorage jest dostępny dla dowolnego kodu JavaScript na stronie, więc jest podatny na XSS — złośliwy skrypt może wykraść token. Dla tokenów sesyjnych bezpieczniej jest używać ciasteczek httpOnly, niedostępnych dla JavaScript.

Artykuły: Kodowanie

Base64: po co jest kodowanie i jak działa

Jak Base64 zamienia dane binarne na tekst ASCII i kiedy naprawdę jest to potrzebne.

Base32: czym różni się od Base64 i kiedy jest wygodniejszy

Alfabet Base32 niewrażliwy na wielkość liter i sytuacje, w których jest wygodniejszy od Base64.

URL Encode/Decode: percent-encoding w linkach

Jak znaki specjalne w adresach i parametrach zamieniają się w sekwencje %XX.

HTML Entities: jak bezpiecznie wyświetlać znaki specjalne

Dlaczego znaki < > & trzeba escapować i jak to zapobiega uszkodzeniu znaczników.

Unicode Escape: co oznaczają sekwencje \uXXXX

Skąd biorą się sekwencje takie jak \u0041 w JSON i ciągach JS oraz co oznaczają.

ROT13 i szyfr Cezara: proste podstawianie znaków

Dlaczego przesunięcie o 13 liter sprawia, że ROT13 jest samoodwrotny, i po co się go dziś używa.

Punycode: jak umiędzynarodowione domeny działają w DNS

Jak domena z niełacińskimi znakami zamienia się w formę ASCII z prefiksem xn--.

Alfabet Morse'a: jak tekst zamienia się w kropki i kreski

Zasada kodowania liter jako kropek i kresek oraz gdzie alfabet Morse'a jest dziś stosowany.

Data URI: kiedy osadzać obrazy bezpośrednio w kodzie

Jak Data URI osadza zawartość pliku bezpośrednio w HTML lub CSS i kiedy się to opłaca.

Gzip + Base64: kompresja danych do przesyłania jako tekst

Dlaczego skompresowane dane binarne dodatkowo koduje się w Base64, zanim trafią do pola tekstowego.

XML Entities: escapowanie znaków w dokumentach XML

Pięć obowiązkowych encji XML, bez których dokument psuje się podczas parsowania.