A JWT (JSON Web Token) egy nyílt szabvány (RFC 7519), amely egy tömör és önálló módszert határoz meg az információk biztonságos továbbítására a felek között. Ez az információ ellenőrizhető és megbízható, mert digitálisan aláírt.
A JWT három részből áll, pontokkal (.) elválasztva: fejléc (Header), tartalom (Payload) és aláírás (Signature). A fejléc meghatározza az aláírási algoritmust, a tartalom tartalmazza a kijelentéseket, az aláírás pedig arra szolgál, hogy ellenőrizze, hogy az üzenet nem módosult-e.
Gyakori JWT használati esetek
Hitelesítés (a leggyakoribb eset), információcsere (a JWT biztonságosan továbbíthat információkat, mivel aláírhatóak), engedélyezés (tartalmazza a felhasználói jogosultságokat) és egyszeri bejelentkezés megvalósítása.
Aláírási algoritmus típusok
A JWT többféle aláírási algoritmust támogat, főként két kategóriába sorolható: HMAC-alapú szimmetrikus algoritmusok (pl. HS256) és RSA/ECDSA-alapú aszimmetrikus algoritmusok (pl. RS256, ES256). A szimmetrikus algoritmusok ugyanazt a kulcsot használják az aláíráshoz és az ellenőrzéshez, míg az aszimmetrikus algoritmusok privát kulccsal aláírnak és nyilvános kulccsal ellenőriznek.
Ne tároljon érzékeny információkat (pl. jelszavakat) a JWT-ben, mivel a JWT tartalmi része csak Base64 kódolású, nem titkosított. A magas biztonsági igényű alkalmazásokhoz javasolt rövid lejárati idő beállítása és a token rotációs stratégia alkalmazása.
Mi a teendő, ha a JWT lejár?
Amikor a JWT lejár, a szerver elutasítja ezt a tokent. Ajánlott megoldás a frissítő token (Refresh Token) mechanizmus implementálása, ahol az ügyfél a frissítő tokennel szerezhet új hozzáférési tokent anélkül, hogy a felhasználónak újra be kellene jelentkeznie. A frissítő tokenek általában hosszabb érvényességgel rendelkeznek, de óvatosan kell tárolni őket.
Hogyan vonható vissza a JWT?
Szigorúan véve a JWT állapot nélküli tokenként van tervezve, és nem vonható vissza. Azonban néhány gyakori megoldás létezik: visszavont tokenek feketelistájának karbantartása (ami csökkentheti a JWT állapot nélküli előnyeit), rövid lejárati idő használata frissítő tokenekkel, vagy a tokenbe beágyazott verzióazonosító, amivel a szerver elutasíthatja a régebbi verziókat.
Mi a különbség a JWT és a session között?
A JWT egy önálló token, amely tartalmazza az összes szükséges információt, ideális elosztott rendszerekhez, nem igényel szerveroldali munkamenet-állapot tárolást. A Session szerveroldali tároláson alapul, munkamenet-állapotot igényel, inkább egy szerveres architektúrához illik. A JWT bővíthetőbb, de a visszavonás bonyolult; a Session könnyen visszavonható, de kevésbé bővíthető.