JSON Web Token (JWT) je odprt standard za varno prenašanje podatkov med dvema stranema — najpogosteje med uporabnikom in strežnikom. V osnovi je to dolg besedilni niz, ki vsebuje podatke o prijavi, in jo strežnik preveri brez potrebe po bazi. JWT je danes prisoten skoraj povsod: pri prijavi v spletne aplikacije, pri povezovanju z API-ji in pri overjanju med mikrostoritvami.
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImJvcnV0In0.KmF8vX7qz3
Sestava žetona
Žeton je sestavljen iz treh delov, ločenih s piko. Vsak del je posebej kodiran v obliki Base64:
- glava (header) — pove, kateri algoritem se uporablja za podpis,
- vsebina (payload) — sami podatki, na primer uporabniško ime in vloga,
- podpis (signature) — kriptografski podpis, s katerim strežnik preveri pristnost.
Kako deluje prijava
Postopek je enostaven: uporabnik se prijavi z geslom, strežnik ga preveri in izda žeton. Uporabnik ta žeton pošlje nazaj pri vsaki nadaljni zahtevi — običajno v glavi HTTP. Strežnik preveri podpis in ve, da je žeton izdal sam, ne da bi moral karkoli preverjati v podatkovni bazi.
// Odgovor strežnika ob uspešni prijavi
{ "token": "eyJhbGciOiJIUzI1NiJ9..." }
// Nadaljnji zahtevek uporabnika
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Prednosti shranjene vsebine
Ker so podatki zapisani neposredno v žeton, strežnik ne potrebuje sej ali baze, da bi vedel, kdo je uporabnik. To pomeni, da se JWT odlično poda porazdeljenim sistemom, kjer več strežnikov poganja isto aplikacijo — vsak od njih namreč preveri podpis neodvisno.
Previdnost pri vsebini
Pomembno je vedeti: del s podatki je le kodiran, ne pa šifriran. Vsakdo, ki ima žeton, lahko vsebino prebere — to je mogoče narediti kar v brskalniku. Zato vanj nikoli ne zapišemo gesel ali občutljivih podatkov. Varnost temelji na podpisu, ki preprečuje, da bi kdo vsebino spremenil.
Življenska doba žetona
Žeton ima običajno omejeno življenjsko dobo (npr. 15 minut ali 1 uro), ki je zapisana neposredno v njegovi vsebini. Ko poteče, uporabnik pridobi novega — pogosto s pomočjo žetona za osvežitev (refresh token), ki ima daljšo veljavnost. Tako kraja žetona prinese napadalcu sorazmerno malo.
Kje se JWT uporablja
Najpogostejša uporaba so sodobni API-ji, kjer je prijava z žetonom praktičnejša od sej: žetoni se lahko prenašajo med domenami in strežniki in ne zahtevajo shranjevanja stanja na strežniku. Pri klasičnih spletnih straneh s PHP sejami pa JWT ni nujen — tam seje delujejo povsem ustrezno..
JWT v enem stavku: podpisana vstopnica s podatki, zapisanimi neposredno nanjo, ki jo strežnik lahko preveri brez uporabe pomnilnika - vendar jo zgolj preverja, nikoli pa ne razkriva.