Utilia

JWT generator i verifikator

Napravi i proveri JSON Web Tokene sa HS256, RS256, PS256, ES256 ili EdDSA. Menjaj polja, postavi exp i iat i proveri potpise lokalno u pregledaču.

Ključevi i tokeni su tajne. Sve se potpisuje i proverava lokalno pomoću Web Crypto API-ja tvog pregledača: ništa se ne otprema.

Napravi potpisan JWT

Vremenska polja:

Proveri JWT

Kako se pravi potpisan JWT

  1. Izaberi Algoritam: HS256/384/512 (zajednička tajna), RS256/384/512 ili PS256/384/512 (RSA), ES256/384/512 (ECDSA na krivama P-256, P-384 ili P-521) ili EdDSA (Ed25519, kada ga pregledač podržava).
  2. Izmeni Zaglavlje (JSON) i Sadržaj (JSON polja). Polje alg uvek prati izabrani algoritam, a typ je podrazumevano JWT.
  3. Dugmadima za vremenska polja dodaj datume: iat = sada, nbf = sada, ili izaberi rok kao što je „za 1 sat“ i klikni Postavi exp. Vrednosti su NumericDate: sekunde od 1. januara 1970. UTC.
  4. Unesi Tajnu (HS algoritmi, kao tekst ili Base64/Base64url u polju Format tajne) ili Privatni ključ (PEM ili JWK). Nemaš ključ? Klikni Generiši probni ključ.
  5. Klikni Potpiši token, zatim Kopiraj rezultat ili klikni Proveri ovaj token da ga odmah proveriš.

Kako se proverava JWT

  1. Nalepi token pod Token za proveru.
  2. Izaberi Očekivani algoritam. Ako ostaviš „Iz zaglavlja tokena (nikada none)“, prihvata se šta god zaglavlje kaže, osim none; izborom konkretnog algoritma alat odbija svaki token potpisan drugačije, kao što bi trebalo da radi pravi server.
  3. Unesi tajnu ili Javni ključ (PEM ili JWK): PEM blok PUBLIC KEY, RSA PUBLIC KEY ili CERTIFICATE, JWK ili JWK Set (koristi se ključ čiji se kid poklapa sa zaglavljem).
  4. Po želji postavi Tolerancija sata (sekunde) da bi se tolerisale male razlike u satovima, pa klikni Proveri token.

Rezultat kaže da li je potpis ispravan, a zatim proverava exp (istek) i nbf (ne važi pre) prema trenutnom vremenu tvog računara. Token sa tačnim potpisom ali 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) i privatne JWK ključeve. Ključevi zaštićeni lozinkom prvo moraju da se izvezu bez lozinke. Generiši probni ključ pravi nasumičnu tajnu veličine heša za HS algoritme, RSA par od 2048 bita za RS i PS, odgovarajuću krivu za ES ili Ed25519 par. Ključeve dobijaš kao PEM i JWK, a popunjavaju se sa obe strane pa krug potpisivanja i provere radi odmah.

Potpisi prate RFC 7515 i RFC 7518: RSA-PSS koristi so jednaku dužini heša, a ECDSA potpisi su sirova nadovezana vrednost r||s. Implementacija reprodukuje HS256 primer iz RFC 7515, Dodatak A.1.

Bezbednosne napomene

  • Sve radi u tvom pregledaču pomoću Web Crypto API-ja. Ni tokeni ni ključevi se nigde ne šalju, ali ipak radije koristi probne ključeve nego produkcione tajne.
  • alg: none se nikada ne potpisuje i nikada ne prihvata.
  • HMAC tajne treba da budu bar toliko dugačke kao heš (32 bajta za HS256). Kraća tajna izaziva upozorenje.
  • Potpis dokazuje celovitost i poreklo, a ne da su polja prikladna: serveri moraju da provere i iss, aud i dozvole (scope).

Česta pitanja

Koja je razlika između HS256 i RS256?

HS256 koristi jednu zajedničku tajnu i za potpisivanje i za proveru, pa bi svaki verifikator mogao da lažira tokene. RS256 (kao i PS256, ES256, EdDSA) potpisuje privatnim ključem, a proverava javnim ključem koji se bezbedno može objaviti.

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

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

Zašto se alg „none“ odbija?

Nepotpisan token može da napravi bilo ko. Prihvatanje takvih tokena bila je klasična ranjivost JWT biblioteka, zato ga ovaj alat odbija i pri potpisivanju i pri proveri.

Mogu li da koristim sopstveni RSA ili EC ključ?

Da. Nalepi privatni ključ kao PEM ili JWK za potpisivanje, a javni ključ za proveru. Alat proverava da li se tip ključa i kriva poklapaju sa izabranim algoritmom.

Zašto je EdDSA onemogućen?

Tvoj pregledač još ne podržava Ed25519 u Web Crypto. Novije verzije Chrome-a, Edge-a, Firefox-a i Safari-ja to podržavaju.