Utilia

Generátor a ověření JWT

Vytvářej a ověřuj JSON Web Tokeny s HS256, RS256, PS256, ES256 či EdDSA. Uprav claims, nastav exp a iat a zkontroluj podpis ve svém prohlížeči.

Klíče a tokeny jsou tajné. Vše se podepisuje a ověřuje lokálně pomocí Web Crypto API tvého prohlížeče: nic se nenahrává.

Vytvořit podepsaný JWT

Časové údaje:

Ověřit JWT

Jak vytvořit podepsaný JWT

  1. Vyber Algoritmus: HS256/384/512 (sdílené tajemství), RS256/384/512 nebo PS256/384/512 (RSA), ES256/384/512 (ECDSA na P-256, P-384 či P-521) nebo EdDSA (Ed25519, pokud ho tvůj prohlížeč podporuje).
  2. Uprav Hlavičku (JSON) a Obsah (JSON claims). Pole alg vždy odpovídá zvolenému algoritmu a typ má výchozí hodnotu JWT.
  3. Tlačítky pro časové údaje přidej data: iat = teď, nbf = teď, nebo vyber dobu, například „za 1 hodinu“, a klikni na Nastavit exp. Hodnoty jsou NumericDate: sekundy od 1. ledna 1970 UTC.
  4. Zadej Tajemství (algoritmy HS, jako text nebo Base64/Base64url podle Formátu tajemství) nebo Soukromý klíč (PEM nebo JWK). Ještě nemáš klíč? Klikni na Vygenerovat testovací klíč.
  5. Klikni na Podepsat token, pak výsledek Zkopíruj nebo klikni na Ověřit tento token a zkontroluj ho hned.

Jak ověřit JWT

  1. Vlož token do pole Token k ověření.
  2. Vyber Očekávaný algoritmus. Ponecháš-li „Z hlavičky tokenu (nikdy none)“, přijme se cokoli, co hlavička uvádí, kromě none; zvolíš-li konkrétní algoritmus, nástroj odmítne každý token podepsaný jinak, tak jako by to měl dělat skutečný server.
  3. Zadej tajemství nebo Veřejný klíč (PEM nebo JWK): blok PEM PUBLIC KEY, RSA PUBLIC KEY či CERTIFICATE, JWK nebo sadu JWK Set (použije se klíč, jehož kid odpovídá hlavičce).
  4. Volitelně nastav Toleranci hodin (sekundy) pro vyrovnání drobných rozdílů v čase a klikni na Ověřit token.

Výsledek říká, zda je podpis platný, a poté zkontroluje exp (konec platnosti) a nbf (platné od) podle aktuálního času tvého počítače. Token se správným podpisem, ale s vypršelou platností, se hlásí jako vypršelý, nikoli jako platný.

Klíče a formáty

Pro podepisování nástroj přijímá bloky PKCS#8 PRIVATE KEY, PKCS#1 RSA PRIVATE KEY a SEC1 EC PRIVATE KEY (uvnitř se převedou na PKCS#8) a soukromé JWK. Klíče chráněné heslem je nutné nejdřív exportovat bez hesla. Tlačítko Vygenerovat testovací klíč vytvoří pro algoritmy HS náhodné tajemství o velikosti hashe, pro RS a PS pár klíčů RSA o 2048 bitech, pro ES odpovídající křivku nebo pár Ed25519. Klíče dostaneš ve formátu PEM i JWK a doplní se na obou stranách, takže celý postup (podepsat a ověřit) funguje okamžitě.

Podpisy odpovídají RFC 7515 a RFC 7518: RSA-PSS používá sůl stejně dlouhou jako hash a podpisy ECDSA jsou prosté zřetězení r||s. Implementace reprodukuje příklad HS256 z RFC 7515, příloha A.1.

Bezpečnostní poznámky

  • Všechno běží ve tvém prohlížeči pomocí Web Crypto API. Tokeny ani klíče se nikam neposílají, přesto raději používej testovací klíče než produkční tajemství.
  • alg: none není nikdy podepsaný a nikdy se nepřijímá.
  • Tajemství HMAC by mělo být přinejmenším tak dlouhé jako hash (32 bajtů u HS256). Kratší tajemství vyvolá varování.
  • Podpis dokládá integritu a původ, ne to, že jsou claims vhodné: servery musí navíc kontrolovat iss, aud a rozsahy oprávnění.

Časté dotazy

V čem se liší HS256 od RS256?

HS256 používá jedno sdílené tajemství k podepisování i k ověřování, takže každý, kdo token ověřuje, by ho mohl i padělat. RS256 (a také PS256, ES256, EdDSA) podepisuje soukromým klíčem a ověřuje veřejným klíčem, který lze bezpečně zveřejnit.

Proč se i při platném podpisu zobrazí chyba?

Protože token je mimo dobu své platnosti: exp je v minulosti nebo nbf v budoucnosti. Kontrola podpisu a kontrola času se hlásí zvlášť.

Proč se alg „none“ odmítá?

Nepodepsaný token může vytvořit kdokoli. Jeho přijímání bylo klasickou zranitelností knihoven JWT, proto ho tento nástroj odmítá při podepisování i při ověřování.

Mohu použít vlastní klíč RSA nebo EC?

Ano. K podpisu vlož soukromý klíč jako PEM nebo JWK a k ověření veřejný klíč. Nástroj zkontroluje, zda typ klíče a křivka odpovídají zvolenému algoritmu.

Proč je EdDSA zakázáno?

Tvůj prohlížeč zatím nepodporuje Ed25519 ve Web Crypto. Aktuální verze Chrome, Edge, Firefoxu a Safari ho podporují.