Utilia

Generator și verificator JWT

Creează și verifică JSON Web Tokens cu HS256, RS256, PS256, ES256 sau EdDSA. Editează revendicările, setează exp și iat și verifică semnăturile în browser.

Cheile și token-urile sunt secrete. Totul este semnat și verificat local cu API-ul Web Crypto al browserului tău: nu se încarcă nimic.

Creează un JWT semnat

Revendicări de timp:

Verifică un JWT

Cum creezi un JWT semnat

  1. Alege Algoritm: HS256/384/512 (secret comun), RS256/384/512 sau PS256/384/512 (RSA), ES256/384/512 (ECDSA pe P-256, P-384 sau P-521) ori EdDSA (Ed25519, dacă browserul tău îl acceptă).
  2. Editează Antet (JSON) și Conținut (revendicări JSON). Câmpul alg urmează întotdeauna algoritmul ales, iar typ este implicit JWT.
  3. Folosește butoanele pentru revendicări de timp ca să adaugi date: iat = acum, nbf = acum, sau alege o durată, de exemplu „peste 1 oră”, și apasă Setează exp. Valorile sunt NumericDate: secunde de la 1 ianuarie 1970 UTC.
  4. Introdu Secret (algoritmi HS, ca text sau Base64/Base64url în Format secret) sau Cheie privată (PEM sau JWK). Nu ai încă o cheie? Apasă Generează cheie de test.
  5. Apasă Semnează token-ul, apoi Copiază rezultatul sau apasă Verifică acest token ca să îl verifici pe loc.

Cum verifici un JWT

  1. Lipește token-ul în Token de verificat.
  2. Alege Algoritm așteptat. Dacă lași „Din antetul token-ului (niciodată none)”, se acceptă orice indică antetul, cu excepția none; dacă alegi un algoritm anume, instrumentul refuză orice token semnat altfel, așa cum ar trebui să facă un server real.
  3. Introdu secretul sau Cheie publică (PEM sau JWK): un bloc PEM PUBLIC KEY, RSA PUBLIC KEY sau CERTIFICATE, un JWK sau un JWK Set (se folosește cheia al cărei kid se potrivește cu antetul).
  4. Dacă vrei, setează Toleranță de ceas (secunde) pentru a admite mici diferențe de ceas, apoi apasă Verifică token-ul.

Rezultatul spune dacă semnătura este validă, apoi verifică exp (expirare) și nbf (valabil de la) în raport cu ora curentă a calculatorului tău. Un token cu semnătură corectă, dar cu expirarea în trecut, este raportat ca expirat, nu ca valid.

Chei și formate

Pentru semnare, instrumentul acceptă blocuri PKCS#8 PRIVATE KEY, PKCS#1 RSA PRIVATE KEY și SEC1 EC PRIVATE KEY (convertite intern în PKCS#8), precum și JWK-uri private. Cheile protejate prin parolă trebuie exportate mai întâi fără parolă. Generează cheie de test creează un secret aleatoriu de dimensiunea hash-ului pentru algoritmii HS, o pereche de chei RSA de 2048 de biți pentru RS și PS, curba corespunzătoare pentru ES sau o pereche Ed25519. Primești cheile în PEM și JWK, iar ele sunt completate în ambele secțiuni, astfel că un circuit complet de semnare și verificare funcționează imediat.

Semnăturile respectă RFC 7515 și RFC 7518: RSA-PSS folosește un salt la fel de lung ca hash-ul, iar semnăturile ECDSA sunt concatenarea brută r||s. Implementarea reproduce exemplul HS256 din RFC 7515, Anexa A.1.

Note de securitate

  • Totul rulează în browserul tău cu API-ul Web Crypto. Nici token-urile, nici cheile nu sunt trimise nicăieri, dar preferă totuși chei de test în locul secretelor de producție.
  • alg: none nu este niciodată semnat și niciodată acceptat.
  • Secretele HMAC trebuie să fie cel puțin la fel de lungi ca hash-ul (32 de octeți pentru HS256). Un secret mai scurt declanșează un avertisment.
  • O semnătură dovedește integritatea și originea, nu că revendicările sunt adecvate: serverele trebuie să verifice și iss, aud și permisiunile (scopes).

Întrebări frecvente

Care este diferența dintre HS256 și RS256?

HS256 folosește un singur secret comun atât pentru semnare, cât și pentru verificare, deci orice verificator ar putea și să falsifice token-uri. RS256 (la fel ca PS256, ES256 și EdDSA) semnează cu o cheie privată și verifică cu o cheie publică, care poate fi publicată fără risc.

De ce apare o eroare deși semnătura este validă?

Pentru că token-ul se află în afara perioadei de valabilitate: exp este în trecut sau nbf este în viitor. Verificarea semnăturii și verificarea timpului sunt raportate separat.

De ce este refuzat alg „none”?

Un token nesemnat poate fi creat de oricine. Acceptarea lui a fost o vulnerabilitate clasică a bibliotecilor JWT, de aceea acest instrument îl respinge atât la semnare, cât și la verificare.

Pot folosi propria cheie RSA sau EC?

Da. Lipește cheia privată ca PEM sau JWK pentru semnare și cheia publică pentru verificare. Instrumentul verifică dacă tipul cheii și curba corespund algoritmului ales.

De ce este dezactivat EdDSA?

Browserul tău nu acceptă încă Ed25519 în Web Crypto. Versiunile recente de Chrome, Edge, Firefox și Safari îl acceptă.