Anatomija JWT-a
JSON Web Token (RFC 7519) čine tri Base64URL kodirana dela spojena tačkama: zaglavlje.payload.potpis. Zaglavlje kaže koji ga je algoritam potpisao. Payload je JSON objekat sa tvrdnjama (claimovima) o subjektu. Potpis pokriva prva dva dela, pa verifikator može da utvrdi da li je išta izmenjeno.
Prva dva dela su samo kodirana, ne i šifrovana. Svako ko ima token može da pročita svaki claim, zbog čega ovaj dekoder radi bez ikakvog ključa, i zbog čega JWT nikada ne sme da nosi tajne.
Standardni claimovi
| Claim | Značenje |
|---|---|
| iss | Izdavalac: ko je napravio token |
| sub | Subjekat: na koga se token odnosi, obično ID korisnika |
| aud | Publika: kom servisu je token namenjen; verifikatori moraju to da provere |
| exp | Istek, kao Unix vremenska oznaka u sekundama |
| nbf | Ne pre: token je nevažeći do ovog vremena |
| iat | Izdat u |
| jti | Jedinstveni ID tokena, koristi se za liste opoziva |
Algoritmi potpisivanja
HS256 (HMAC sa SHA-256) koristi jednu deljenu tajnu i za potpisivanje i za verifikaciju, pa svako ko može da verifikuje može i da falsifikuje; odgovara jednom servisu koji razgovara sam sa sobom. RS256, ES256 i EdDSA koriste privatni ključ za potpisivanje i javni za verifikaciju, što koriste provajderi identiteta (Auth0, Keycloak, Google, Azure AD) da bi bilo koji servis mogao da proverava tokene, a da ne može da ih kuje. Javni ključevi se obično objavljuju na /.well-known/jwks.json URL-u.
Šta verifikatori moraju da provere
- Potpis, ključem koji odgovara
algiz zaglavlja, i nikada ne prihvatajući"alg": "none". - Da je
expu budućnosti, anbf, ako postoji, u prošlosti (uz malo tolerancije za odstupanje satova). - Da su
issiaudočekivane vrednosti.
Pitanja
Da li je bezbedno da ovde nalepim svoj token?
Token dekodira JavaScript u vašem pregledaču i ne prenosi se. Ipak, token je kredencijal: tretirajte ga kao lozinku, a pri otklanjanju grešaka radije koristite kratkotrajne test tokene.
Zašto dekoder kaže da je moj token istekao?
Njegov exp claim je raniji od sata vašeg računara. Tokeni su obično kratkotrajni (minuti do sati); uzmite nov sa endpointa za prijavu ili osvežavanje. Ako je vaš sat pogrešan, i provera će biti pogrešna.
Mogu li ovde da verifikujem RS256 token?
Ne u ovoj verziji. RS256 zahteva javni ključ izdavaoca (sa njegovog JWKS endpointa). Dekoder prikazuje zaglavlje, payload i vremenske provere za bilo koji algoritam; samo HMAC algoritmi mogu da se verifikuju tajnom.
Zašto je payload čitljiv bez tajne?
Zato što je JWT potpisan, a ne šifrovan. Base64URL je po dizajnu reverzibilan. Ako sadržaj mora da bude skriven, token mora da se šifruje kao JWE, koji izgleda slično, ali ima pet delova.
Šta znači vremenska oznaka u exp?
Sekunde od 1. januara 1970. UTC (Unix vreme). Dekoder je pretvara u datum u vašoj vremenskoj zoni i prikazuje koliko je preostalo. Za konverziju drugih vrednosti koristite alat za Unix vremenske oznake.