Struktura i format JSON Web Tokena
JSON Web Token (JWT) je kompaktni i samostalni format za siguran prijenos informacija između strana u obliku JSON objekta. Token se sastoji od tri različita dijela koji su međusobno odvojeni tačkom. Ti dijelovi su:
- Zaglavlje (Header): Sadrži metapodatke o tokenu, uglavnom navodeći tip tokena i algoritam koji se koristi za potpisivanje.
- Sadržaj (Payload): Sadrži stvarne podatke ili tvrdnje (claims) o subjektu i dodatne metapodatke poput vremena izdavanja i isteka.
- Potpis (Signature): Služi za provjeru da pošiljatelj JWT-a jeste onaj za kojeg se predstavlja i da sadržaj nije izmijenjen tokom prijenosa.
Svaki od ovih dijelova je kodiran pomoću Base64URL algoritma kako bi se osigurao siguran prijenos unutar URL-ova, HTTP zaglavlja i drugih tekstualnih okruženja. Base64URL je varijacija standardnog Base64 kodiranja koja zamjenjuje znakove "+" i "/" sa "-" i "_" te uklanja znakove popunjavanja "=" kako bi se izbjegli problemi s interpretacijom u web sistemima.
Uloga zaglavlja i uobičajene tvrdnje
Zaglavlje JWT-a pruža informacije koje su primaocu potrebne za obradu tokena. Ono je strukturirano kao JSON objekt koji se zatim kodira u Base64URL format. Unutar zaglavlja se najčešće nalaze sljedeće tvrdnje:
alg: Označava kriptografski algoritam koji se koristi za osiguranje tokena (npr. HS256, RS256).typ: Označava tip tokena, što je u ovom slučaju najčešće "JWT".
Ove informacije omogućavaju sistemu koji prima token da prepozna kako treba interpretirati i verifikovati ostatak podataka.
Sadržaj tokena i upravljanje vremenom
Sadržaj (Payload) sadrži tvrdnje koje predstavljaju podatke o korisniku ili aplikaciji, kao i metapodatke o samom tokenu. Tvrdnje se dijele na registrovane, javne i privatne. Među registrovanim tvrdnjama koje se odnose na vrijeme, ključne su:
iat(Issued At): Vrijeme kada je token izdat. Ova vrijednost se predstavlja kao Unix vremenska oznaka (broj sekundi od 1. januara 1970. godine).exp(Expiration Time): Vrijeme nakon kojeg token više ne smije biti prihvaćen za obradu, također predstavljeno kao Unix vremenska oznaka.
Pravilno upravljanje ovim tvrdnjama sprječava zloupotrebu starih ili presretnutih tokena, jer sistemi odbijaju tokene čije je vrijeme isteka prošlo.
Razlika između dekodiranja i verifikacije
Dekodiranje i verifikacija JWT-a su dva suštinski različita procesa:
- Dekodiranje: Predstavlja isključivo prevođenje Base64URL kodiranog teksta nazad u čitljiv JSON format. Za ovaj proces nije potreban nikakav tajni ključ niti kriptografska operacija. Svako ko ima pristup tokenu može ga dekodirati i vidjeti njegov sadržaj.
- Verifikacija: Podrazumijeva provjeru integriteta i autentičnosti tokena. Da bi se token verifikovao, sistem mora uzeti zaglavlje i sadržaj, te pomoću odgovarajućeg tajnog ključa (kod simetričnog šifriranja) ili javnog ključa (kod asimetričnog šifriranja) ponovo izračunati potpis i uporediti ga sa potpisom na kraju tokena.
Ovaj alat vrši isključivo dekodiranje i ne verifikuje potpis JWT-a, niti zahtijeva unos tajnog ili javnog ključa. Neautorizovano oslanjanje na podatke iz dekodiranog tokena bez prethodne verifikacije potpisa predstavlja ozbiljan sigurnosni rizik, jer napadač može izmijeniti sadržaj i poslati lažne podatke koje neverifikovani sistem može prihvatiti kao istinite.
Pravila dekodiranja i rješavanje grešaka
Prilikom unosa tokena u polje "Zalijepite svoj JWT", alat primjenjuje niz pravila za validaciju i obradu:
- Prazan unos: Ako u polju nema teksta, alat ostaje u stanju "Spremno. Zalijepite JWT da biste ga dekodirali.".
- Format: Token mora imati tačno tri dijela odvojena tačkom. U suprotnom, prikazuje se greška "Nije važeći JWT — očekuju se tri dijela odvojena tačkom".
- Base64URL dekodiranje: Ako zaglavlje sadrži nevažeće znakove, javlja se greška "Nije moguće dekodirati zaglavlje — nevažeći Base64URL". Ako je problem u sadržaju, prikazuje se "Nije moguće dekodirati sadržaj — nevažeći Base64URL".
- JSON validnost: Ako dekodirani tekst nije ispravno strukturiran, alat ispisuje "Zaglavlje nije važeći JSON." ili "Sadržaj nije važeći JSON.".
- Dužina: Ako je uneseni niz predugačak, prikazuje se poruka "To je predugačko da bi bio stvarni JWT.".
Kada se unese nevažeći token, dekodirane oblasti se skrivaju. Klikom na dugme "Očisti", unos se briše, a fokus se automatski vraća na polje za unos.
Nakon uspješnog dekodiranja, alat prikazuje informacije o tokenu, uključujući broj znakova u polju "Znakovi", te statusnu značku koja može biti "Važeći", "Istekao", "Još nije važeći" ili "Bez isteka" (ako token ne sadrži exp tvrdnju). Uz status se prikazuje i napomena: "Ovo provjerava samo exp tvrdnju — ne verificira potpis, izdavača ili publiku.".
Privatnost i lokalna obrada podataka
Vaš token se dekodira u Vašem pregledniku. Ništa se ne šalje na BroBroGo. Svi proračuni, dekodiranje Base64URL formata i parsiranje JSON struktura obavljaju se lokalno na vašem uređaju, što osigurava da osjetljivi podaci iz tokena ne napuštaju vaše lokalno okruženje tokom korištenja ovog alata.
Često postavljana pitanja (FAQ)
Da li je sigurno zalijepiti moj JWT ovdje?
Da. Dekodiranje se odvija u potpunosti u Vašem pregledniku — Vaš token se nikada ne šalje na BroBroGo.
Da li ovo verifikuje potpis?
Ne. Alat samo dekodira zaglavlje (header) i sadržaj (payload) kako biste ih mogli pročitati. Za verifikaciju potpisa potreban je tajni ključ ili javni ključ, koje ovaj alat nikada ne traži.
Kako mogu znati da li je moj token istekao?
Dekoder čita tvrdnju 'exp' i prikazuje statusnu značku — važeći, istekao, još nije važeći ili bez isteka — pored dekodiranog tokena.
Zašto se prikazuje greška o nevažećem Base64URL-u?
Ova greška se javlja kada uneseni dijelovi tokena sadrže znakove koji ne pripadaju Base64URL standardu ili ako je struktura podataka oštećena tokom kopiranja.