Structura unui JSON Web Token (JWT)
Un JSON Web Token (JWT) este un standard compact și autonom utilizat pentru transmiterea securizată a informațiilor sub formă de obiect JSON. Structura unui astfel de token este compusă din trei părți distincte, separate prin caracterul punct (.): antetul (header), corpul (payload) și semnătura.
Fiecare dintre aceste secțiuni îndeplinește un rol specific în definirea și securizarea datelor transmise:
- Antetul (Header): Conține metadate despre token, indicând de regulă tipul acestuia și algoritmul de criptare sau semnare utilizat.
- Corpul (Payload): Reprezintă zona care conține datele propriu-zise transmise, numite revendicări (claims). Acestea pot fi informații despre utilizator, permisiuni sau alte metadate necesare aplicației.
- Semnătura: Este utilizată pentru a verifica dacă mesajul nu a fost modificat pe parcurs. Semnătura se generează prin codificarea antetului și a corpului, urmată de aplicarea algoritmului specificat împreună cu o cheie secretă sau o cheie publică.
Rolul antetului și revendicările comune
Antetul unui JWT oferă instrucțiunile necesare pentru procesarea tokenului. Acesta este un obiect JSON simplu, codificat în format Base64URL. În cadrul antetului, se regăsesc frecvent următoarele proprietăți standard:
alg(Algoritm): Specifică algoritmul utilizat pentru semnarea tokenului, cum ar fi HS256 (HMAC folosind SHA-256) sau RS256 (RSA folosind SHA-256).typ(Tip): Indică tipul de token, care în acest caz este aproape întotdeauna "JWT".
Instrumentul extrage aceste informații și le afișează în mod structurat, oferind detalii precum Algoritm și Tip direct din structura decodificată a antetului.
Corpul tokenului și gestionarea timpului
Corpul (payload) conține informațiile de stare și revendicările transmise între părți. Aceste revendicări sunt clasificate în trei categorii: înregistrate (standardizate), publice și private. Printre cele mai importante revendicări înregistrate, care controlează ciclul de viață al unui token, se numără:
iat(Issued At): Reprezintă momentul exact în care tokenul a fost emis, exprimat ca timestamp Unix. Instrumentul interpretează această valoare și o afișează sub eticheta Emis la.exp(Expiration Time): Definește momentul de la care tokenul nu mai trebuie acceptat pentru procesare, fiind de asemenea un timestamp Unix. Această valoare este mapată în interfață ca Expiră la.
Pe baza revendicării exp, instrumentul evaluează starea temporală a tokenului și afișează o etichetă de stare corespunzătoare:
- Valid: Tokenul nu a depășit încă timpul de expirare.
- Expirat: Timpul curent a depășit valoarea definită în
exp. - Nu este valid încă: Tokenul este configurat cu o dată de activare viitoare.
- Fără dată de expirare: Tokenul nu conține proprietatea
expîn corpul său.
Codificarea Base64URL și formatul JSON
Spre deosebire de codificarea Base64 standard, formatul Base64URL este conceput special pentru a fi utilizat în medii unde anumite caractere pot pune probleme de transmitere, cum ar fi adresele URL sau sistemele de fișiere. Base64URL elimină caracterele + și /, înlocuindu-le cu - și, respectiv, _, și elimină complet caracterul de umplere =.
Fiecare dintre primele două secțiuni ale unui JWT (antetul și corpul) este un obiect JSON valid care a fost codificat în Base64URL. Pentru a le decodifica, instrumentul inversează acest proces, transformând șirul Base64URL înapoi în text JSON clar. Dacă structura internă a tokenului nu respectă aceste standarde, instrumentul va semnala erori specifice, cum ar fi:
- Nu s-a putut decodifica antetul — cod Base64URL nevalid
- Nu s-a putut decodifica corpul — cod Base64URL nevalid
- Antetul nu este un cod JSON valid
- Corpul (payload) nu este un cod JSON valid
Diferența dintre decodificare și verificare
Este esențial să se înțeleagă diferența fundamentală dintre decodificarea unui JWT și verificarea acestuia:
- Decodificarea: Este o simplă operațiune de traducere a unui șir de caractere din formatul Base64URL în text JSON lizibil. Oricine are acces la token îl poate decodifica și îi poate citi conținutul. Decodificarea nu garantează autenticitatea sau integritatea datelor.
- Verificarea: Reprezintă procesul matematic prin care se confirmă că tokenul a fost emis de o entitate de încredere și că nu a fost modificat. Aceasta necesită utilizarea cheii secrete (în cazul algoritmilor simetrici) sau a cheii publice (în cazul algoritmilor asimetrici) pentru a valida semnătura.
Acest instrument este un decodificator, nu un validator de semnături. El nu verifică semnătura JWT-ului și nu solicită introducerea unei chei secrete sau a unei chei publice. De aceea, interfața afișează nota explicativă: "Aceasta verifică doar revendicarea exp — nu verifică semnătura, emitentul sau audiența.". Utilizarea unui token decodificat fără verificarea semnăturii într-un mediu de producție prezintă riscuri majore de securitate, deoarece datele din payload pot fi modificate cu ușurință de un atacator.
Reguli de validare și procesare locală
Instrumentul aplică un set strict de reguli pentru a asigura procesarea corectă a datelor introduse în câmpul Lipiți tokenul JWT:
| Situație de intrare | Comportament instrument / Mesaj de eroare |
|---|---|
| Câmp gol | Rămâne în starea "Pregătit. Lipiți un token JWT pentru a-l decodifica." |
| Format fără 3 părți | "Nu este un JWT valid — se așteptau trei părți separate prin punct." |
| Lungime excesivă | "Acesta este prea lung pentru a fi un token JWT real." |
| Eroare de formatare | Zonele decodificate sunt ascunse automat. |
| Ștergere date | La apăsarea butonului Șterge, conținutul este eliminat, se afișează "Conținut șters.", iar focalizarea revine la câmpul de introducere. |
Procesarea datelor se realizează local. Tokenul dumneavoastră este decodificat direct în browser, ceea ce înseamnă că nimic nu este încărcat pe serverele BroBroGo. Acest mod de funcționare asigură că datele sensibile din payload nu părăsesc dispozitivul dumneavoastră în timpul analizei.
Întrebări frecvente
Este sigur să lipesc tokenul meu JWT aici?
Da. Decodificarea are loc în întregime în browserul dumneavoastră — tokenul dumneavoastră nu este trimis niciodată către BroBroGo.
Acest instrument verifică și semnătura?
Nu. Acesta decodifică doar antetul (header) și corpul (payload) pentru a le putea citi. Verificarea unei semnături necesită cheia secretă sau cheia publică de semnare, pe care acest instrument nu o solicită niciodată.
Cum știu dacă tokenul meu a expirat?
Decodificatorul citește proprietatea exp și afișează o etichetă de stare — valid, expirat, nevalid încă sau fără dată de expirare — lângă tokenul decodificat.
De ce primesc eroarea referitoare la cele trei părți separate prin punct?
Un JSON Web Token valid trebuie să conțină exact trei secțiuni (antet, corp și semnătură) delimitate prin caractere punct. Dacă șirul introdus nu respectă această structură de bază, instrumentul va afișa mesajul "Nu este un JWT valid — se așteptau trei părți separate prin punct.".