JWT Decoder: dekódování a ověření tokenu

Rozložte JWT na hlavičku, payload a podpis. Uvidíte čitelné časy platnosti i český výklad nároků a podpis HS256 ověříte přímo v prohlížeči.

Token se dekóduje přímo ve vašem prohlížeči a nikam se neodesílá. Vložit můžete i celou hlavičku Authorization: Bearer … nebo token zalomený na více řádků.

Přehled tokenu

AlgoritmusTypStav
Vydáno (iat)—
Platí od (nbf)—
Vyprší (exp)—
Zbývající platnost—

Hlavička

Zde se zobrazí dekódovaná hlavička tokenu.

Payload

Zde se zobrazí dekódovaná data tokenu.

Nároky (claims)

NárokHodnotaVýznam
Vložte token výše a jeho nároky se rozepíšou sem i s vysvětlením.

Podpis

Zde se zobrazí podpis tokenu.

Ověření algoritmů HS256, HS384 a HS512 proběhne přímo ve vašem prohlížeči. Klíč se nikam neodesílá a nikde neukládá. Asymetrické algoritmy (RS, ES, PS) nástroj neověřuje.


Jak JWT dekodér použít

  1. Vložte token do pole. Můžete zkopírovat i celou hlavičku ve tvaru Authorization: Bearer eyJ, prefix se odstraní sám.
  2. Hlavička a payload se rozloží okamžitě. U každého nároku uvidíte vedle syrové hodnoty i český popis.
  3. Zkontrolujte odznak platnosti. Ukáže, jestli je token platný, prošlý, nebo ještě nezačal platit.
  4. Podpis ověříte vložením tajného klíče. Nástroj spočítá HMAC a porovná ho s podpisem v tokenu.

Z čeho se JSON Web Token skládá

Token má tři části oddělené tečkou: hlavičku, payload a podpis. První dvě jsou obyčejný JSON zakódovaný do base64url. To není šifrování. Kdokoli, kdo token zachytí, si obsah přečte během vteřiny.

Hlavička říká, jakým algoritmem je token podepsaný, typicky HS256 nebo RS256. Payload nese nároky, tedy tvrzení o uživateli a o platnosti tokenu. Podpis je jediná část, která se nedá zfalšovat bez znalosti klíče.

Token o pěti částech není JWS, ale šifrovaný JWE. Ten bez klíče nerozložíte a nástroj vás na to upozorní místo toho, aby hlásil nesmyslnou chybu.

Co znamenají jednotlivé nároky

Registrované nároky definuje RFC 7519 a jejich zkratky jsou záměrně tříznakové, aby token zůstal krátký.

  • iss je vydavatel tokenu, tedy kdo ho podepsal.
  • sub je subjekt, obvykle identifikátor uživatele.
  • aud je příjemce, pro kterého je token určený.
  • exp je konec platnosti. V čase exp a později se token nesmí přijmout.
  • nbf je okamžik, před kterým token ještě neplatí.
  • iat je čas vydání, podle kterého se počítá stáří tokenu.

Časy jsou v sekundách od 1. ledna 1970, ne v milisekundách. Právě tady vzniká nejčastější chyba v JavaScriptu, protože Date.now() vrací milisekundy. Token pak vypadá, jako by platil do roku 56000. Nástroj takovou hodnotu pozná a přepočítá ji, k tomu napíše varování. Ruční převod zvládne i náš převodník Unix timestampu.

Kdy podpis ověřit a kdy to nejde

Dekódování obsahu a ověření pravosti jsou dvě různé věci. Payload si přečtete vždy, ale jestli token skutečně vydal váš server, poznáte jen z podpisu. U algoritmů HS256, HS384 a HS512 se podpis počítá klíčem, který znají obě strany. Vložte ho do pole a nástroj spočítá HMAC přes WebCrypto přímo v prohlížeči.

Algoritmy RS256, ES256 a PS256 pracují s párem klíčů a nástroj je neověřuje. Rozloží je a přečte, ale platnost podpisu vám nepotvrdí a napíše to.

Pozor na hlavičku s alg nastaveným na none. Takový token nemá podpis a serverová knihovna, která ho přijme, pustí dovnitř kohokoli. Je to známá zranitelnost a nástroj na ni upozorní.

Časté otázky

Může obsah tokenu přečíst kdokoli?

Ano. Hlavička i payload jsou jen zakódované, ne zašifrované, takže je přečte každý, kdo token získá. Do payloadu proto nikdy nepatří heslo, číslo karty ani osobní údaje, které nemají opustit server. Podpis brání změně obsahu, ne jeho přečtení.

Odchází můj token někam na server?

Ne. Rozklad tokenu i výpočet HMAC běží v JavaScriptu ve vašem prohlížeči. Token ani tajný klíč se nikam neodesílají a nikde se neukládají, takže po zavření záložky nezůstane nic. U produkčních tokenů je to podstatný rozdíl proti nástrojům, které vstup posílají na svůj backend.

Proč nástroj hlásí prošlý token, když jsem ho právě vytvořil?

Nejčastěji jsou časy v milisekundách místo v sekundách, nebo má stroj, který token vydal, posunuté hodiny. Zkontrolujte hodnotu exp v tabulce nároků. Když u ní svítí varování o milisekundách, opravte generování tokenu.

Jde token upravit a znovu podepsat?

Tenhle nástroj token jen čte, nesestavuje ho. Změnit payload a vyrobit platný podpis jde jedině se znalostí klíče, což je přesně to, co JWT chrání. Pokud potřebujete tokeny generovat, patří to do serverové knihovny, ne do webového nástroje.