Utilia

JWT generator i provjera

Izradi i provjeri JSON Web Tokene s HS256, RS256, PS256, ES256 ili EdDSA. Uredi tvrdnje, postavi exp i iat te provjeri potpise lokalno u pregledniku.

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

Izradi potpisani JWT

Vremenske tvrdnje:

Provjeri JWT

Kako izraditi potpisani JWT

  1. Odaberi Algoritam: HS256/384/512 (zajednička tajna), RS256/384/512 ili PS256/384/512 (RSA), ES256/384/512 (ECDSA na P-256, P-384 ili P-521) ili EdDSA (Ed25519, ako ga tvoj preglednik podržava).
  2. Uredi Zaglavlje (JSON) i Sadržaj (JSON tvrdnje). Polje alg uvijek prati odabrani algoritam, a typ je prema zadanim postavkama JWT.
  3. Gumbima za vremenske tvrdnje dodaj datume: iat = sada, nbf = sada, ili odaberi odgodu poput „za 1 sat“ i klikni Postavi exp. Vrijednosti su NumericDate: sekunde od 1. siječnja 1970. UTC.
  4. Unesi Tajnu (za HS algoritme, kao tekst ili Base64/Base64url u polju Format tajne) ili Privatni ključ (PEM ili JWK). Još nemaš ključ? Klikni Generiraj testni ključ.
  5. Klikni Potpiši token, zatim Kopiraj rezultat ili klikni Provjeri ovaj token za trenutačnu provjeru.

Kako provjeriti JWT

  1. Zalijepi token pod Token za provjeru.
  2. Odaberi Očekivani algoritam. Ako ostaviš „Iz zaglavlja tokena“, prihvaća se sve što zaglavlje kaže, osim none; odabirom određenog algoritma alat odbija svaki token potpisan drukčije, kao što bi trebao i pravi poslužitelj.
  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 kid odgovara zaglavlju).
  4. Po želji postavi Tolerancija sata (sekunde) da bi se tolerirale male razlike u satovima, zatim klikni Provjeri token.

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

Ključevi i formati

Za potpisivanje alat prihvaća PKCS#8 blokove PRIVATE KEY, PKCS#1 blokove RSA PRIVATE KEY i SEC1 blokove EC PRIVATE KEY (interno se pretvaraju u PKCS#8) te privatne JWK-ove. Ključevi zaštićeni lozinkom prvo se moraju izvesti bez lozinke. Generiraj testni ključ stvara nasumičnu tajnu veličine hash funkcije za HS algoritme, RSA par ključeva 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 povratni krug radi odmah.

Potpisi slijede RFC 7515 i RFC 7518: RSA-PSS koristi sol jednake duljine kao hash, a ECDSA potpisi su sirova konkatenacija r||s. Implementacija reproducira HS256 primjer iz RFC-a 7515, Dodatak A.1.

Sigurnosne napomene

  • Sve se izvodi u tvom pregledniku pomoću Web Crypto API-ja. Ni tokeni ni ključevi ne šalju se nikamo, ali ipak radije koristi testne ključeve nego produkcijske tajne.
  • alg: none nikada nije potpisan i nikada se ne prihvaća.
  • HMAC tajne trebaju biti barem duge koliko hash (32 bajta za HS256). Kraća tajna izaziva upozorenje.
  • Potpis dokazuje cjelovitost i podrijetlo, a ne da su tvrdnje prikladne: poslužitelji moraju provjeriti i iss, aud i ovlasti.

Česta pitanja

Koja je razlika između HS256 i RS256?

HS256 koristi jednu zajedničku tajnu i za potpisivanje i za provjeru, pa bi svaki provjeravatelj mogao i krivotvoriti tokene. RS256 (te PS256, ES256, EdDSA) potpisuje privatnim ključem, a provjerava javnim ključem koji se može sigurno objaviti.

Zašto se i uz ispravan potpis prikazuje greška?

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

Zašto se alg „none“ odbija?

Nepotpisani token može izraditi svatko. Prihvaćanje takvih tokena bila je klasična ranjivost JWT biblioteka, pa ga ovaj alat odbija i pri potpisivanju i pri provjeri.

Mogu li koristiti vlastiti RSA ili EC ključ?

Da. Za potpisivanje zalijepi privatni ključ kao PEM ili JWK, a za provjeru javni ključ. Alat provjerava podudaraju li se vrsta ključa i krivulja s odabranim algoritmom.

Zašto je EdDSA onemogućen?

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