Utilia

JWT generator i verifikator

Napravi i provjeri JSON Web Token s HS256, RS256, PS256, ES256 ili EdDSA. Uredi podatke, postavi exp i iat te lokalno provjeri potpis u pregledniku.

Ključevi i tokeni su tajni podaci. Sve se potpisuje i provjerava lokalno pomoću Web Crypto API-ja tvog preglednika: ništa se ne šalje na server.

Napravi potpisani JWT

Vremenski podaci:

Provjeri JWT

Kako napraviti potpisani JWT

  1. Odaberi Algoritam: HS256/384/512 (zajednički tajni ključ), RS256/384/512 ili PS256/384/512 (RSA), ES256/384/512 (ECDSA na krivuljama P-256, P-384 ili P-521) ili EdDSA (Ed25519, ako ga tvoj preglednik podržava).
  2. Uredi Zaglavlje (JSON) i Payload (JSON podaci). Polje alg uvijek slijedi odabrani algoritam, a typ je podrazumijevano JWT.
  3. Dugmad za vremenske podatke dodaju datume: iat = sada, nbf = sada, ili odaberi rok, na primjer „za 1 sat“, i klikni na Postavi exp. Vrijednosti su NumericDate: sekunde od 1. januara 1970. u UTC-u.
  4. Unesi Tajni ključ (HS algoritmi, kao tekst ili Base64/Base64url u polju Format tajnog ključa) ili Privatni ključ (PEM ili JWK). Nemaš ključ? Klikni na Generiši testni ključ.
  5. Klikni na Potpiši token, zatim Kopiraj rezultat ili klikni na Provjeri ovaj token da ga odmah provjeriš.

Kako provjeriti JWT

  1. Zalijepi token u polje Token za provjeru.
  2. Odaberi Očekivani algoritam. Ako ostane „Iz zaglavlja tokena (nikada none)“, prihvata se algoritam iz zaglavlja, osim none. Ako odabereš određeni algoritam, alat odbija svaki token potpisan drugačije, kao što bi trebao i pravi server.
  3. Unesi tajni ključ ili Javni ključ (PEM ili JWK): PEM blok PUBLIC KEY, RSA PUBLIC KEY ili CERTIFICATE, JWK ili JWK Set (koristi se ključ čiji kid odgovara zaglavlju).
  4. Po želji postavi Toleranciju sata (sekunde) da bi se tolerisale male razlike u satovima, pa klikni na Provjeri token.

Rezultat kaže je li potpis ispravan, a zatim provjerava exp (istek) i nbf (ne vrijedi prije) prema trenutnom vremenu tvog računara. Token s tačnim potpisom, ali s istekom u prošlosti, prijavljuje se kao istekao, a ne kao ispravan.

Ključevi i formati

Za potpisivanje alat prihvata PKCS#8 blokove PRIVATE KEY, PKCS#1 RSA PRIVATE KEY i SEC1 EC PRIVATE KEY (interno se pretvaraju u PKCS#8) te privatne JWK-ove. Ključevi zaštićeni lozinkom moraju se prvo izvesti bez lozinke. Generiši testni ključ pravi nasumičan tajni ključ veličine hash funkcije za HS algoritme, RSA par od 2048 bita za RS i PS, odgovarajuću krivulju za ES ili Ed25519 par. Ključeve dobiješ kao PEM i JWK, a upisuju se na obje strane, pa kružni tok (potpisivanje, pa provjera) radi odmah.

Potpisi prate RFC 7515 i RFC 7518: RSA-PSS koristi salt jednak dužini hasha, a ECDSA potpisi su sirova konkatenacija r||s. Implementacija reproducira HS256 primjer iz RFC-a 7515, dodatak A.1.

Sigurnosne napomene

  • Sve radi u tvom pregledniku pomoću Web Crypto API-ja. Ni tokeni ni ključevi ne šalju se nigdje, ali ipak radije koristi testne ključeve nego produkcijske tajne.
  • alg: none se nikada ne potpisuje i nikada ne prihvata.
  • HMAC tajni ključevi trebaju biti barem dugi koliko i hash (32 bajta za HS256). Kraći ključ izaziva upozorenje.
  • Potpis dokazuje integritet i porijeklo, ali ne i da su podaci u tokenu primjereni: serveri moraju provjeriti i iss, aud i opsege (scope).

Česta pitanja

Koja je razlika između HS256 i RS256?

HS256 koristi jedan zajednički tajni ključ i za potpisivanje i za provjeru, pa bi svaki ko provjerava mogao i falsifikovati tokene. RS256 (te PS256, ES256, EdDSA) potpisuje privatnim ključem, a provjerava javnim ključem koji se može sigurno objaviti.

Zašto se greška prikazuje iako je potpis ispravan?

Zato što je token izvan roka važenja: exp je u prošlosti ili je nbf u budućnosti. Provjera potpisa i provjera vremena prijavljuju se odvojeno.

Zašto se alg „none“ odbija?

Nepotpisani token može napraviti bilo ko. Prihvatanje takvih tokena bila je klasična ranjivost JWT biblioteka, pa ih ovaj alat odbija i pri potpisivanju i pri provjeri.

Mogu li koristiti vlastiti RSA ili EC ključ?

Možeš. Zalijepi privatni ključ kao PEM ili JWK za potpisivanje, a javni ključ za provjeru. Alat provjerava da tip ključa i krivulja odgovaraju odabranom algoritmu.

Zašto je EdDSA onemogućen?

Tvoj preglednik još ne podržava Ed25519 u Web Crypto. Novije verzije preglednika Chrome, Edge, Firefox i Safari ga podržavaju.