Mi az a JSON Web Token?
A JSON Web Token (JWT) egy kompakt, URL-biztos boríték egy kis méretű állítás-adathoz. Ez a szabványos hitelesítő adatformátum az állapotmentes webes munkamenetekhez, OAuth/OIDC ID tokenekhez, gép-gép közötti API-hitelesítéshez és aláírt varázslinkekhez. Egy JWT mindig három pontokkal összefűzött base64url szegmens: header.payload.signature. A fejléc és az adat JSON; az aláírás egy bináris MAC vagy digitális aláírás az első két szegmens felett.
Hogyan működnek a JWT-k?
Amikor ez az eszköz dekódol egy tokent, ugyanazt a háromlépéses utat járja be, amelyet minden JWT-könyvtár követ:
- A token pontokra bontása pontosan három nem üres szegmensre. Bármilyen más alakzat hibás.
- A 0. és 1. szegmens Base64url-dekódolása, majd mindegyik
JSON.parse-olása. A fejléc tartalmazza az algoritmust (alg) és a token típusát (typ). Az adat tartalmazza az állításokat (sub,exp,iat, egyedi kulcsok). - Ha van titkos kulcs, a MAC újraszámítása a
<segment0>.<segment1>felett a fejlécben található algoritmus használatával. A bájtok összehasonlítása a harmadik szegmenssel. - Az ellenőrzési eredmény megjelenítése a dekódolt állítások mellett, beleértve az
expállításból számított ember által olvasható lejárati jelzőt.
Miért érdemes JWT-ket a böngészőben dekódolni?
Egy valódi, használatban lévő JWT beillesztése egy távoli hibakeresőbe kiszivárogtatja a hitelesítő adatot a szolgáltatás naplóiba, megfigyelési rendszerébe és bármely partnerhez, akivel a szolgáltatás adatokat oszt meg. Még ha a harmadik féltől származó oldal állítja is, hogy nem naplóz tokeneket, nincs módod ellenőrizni. Ez az eszköz azért készült, hogy soha ne kelljen ezt a kompromisszumot megkötni:
- Nulla hálózat: a futási időben nincs
fetch,XMLHttpRequestvagysendBeaconhívás. Nyisd meg a DevTools-t dekódolás és ellenőrzés közben – a Hálózat panel csendes marad. - Natív Web Crypto: a HMAC-ellenőrzés a
crypto.subtle.importKeyéscrypto.subtle.signfüggvényeket használja, ugyanazokat az alapvető primitíveket, amelyeket a futási időd hívna. - Statikus telepítés: minden oldal egyetlen statikus HTML-fájl, nincs szervervégpont, amelyet veszélyeztetni lehetne. Nincs kiszivárogható token, mert nincs szerver, amelyből kiszivároghatna.
Mit ellenőriz ez az eszköz és mit nem?
Az eszköz 1-es verziója csak a HMAC-SHA család aláírásait ellenőrzi. Konkrétan:
- Támogatott: HS256, HS384, HS512. Add meg a megosztott titkos kulcsot, és az eszköz újraszámítja és összehasonlítja a MAC-et.
- Még nem támogatott: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA és PS256/384/512 (RSA-PSS). Ezekhez nyilvános kulcs szükséges PEM vagy JWK formátumban, és szándékosan egy későbbi kiadásra lettek halasztva.
- Elutasított:
alg: "none". Az eszköz dekódolja a tokent, de kifejezetten jelzi, hogy nem biztonságos – nincs aláírás-ellenőrzés, és bármely éles rendszer, amely elfogad ilyen tokent, súlyos biztonsági réssel rendelkezik.
Hogyan néz ki egy JWT-dekódolási példa?
Illeszd be a kanonikus RFC 7519 példatoken-t a fenti bemeneti mezőbe:
eyJhbG...VCJ9.eyJzdW...IyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
A fejléc {"alg":"HS256","typ":"JWT"}-re dekódolódik, az adat pedig {"sub":"1234567890","name":"John Doe","iat":1516239022}-re. Írd be a your-256-bit-secret szöveget az ellenőrző panelen, és az aláírás-ellenőrzés érvényes eredményt ad. Változtass meg egyetlen karaktert a titkos kulcsban, és érvénytelent ad. Mindez a böngésződön belül marad.
Ez az a JWT-dekódoló, amelyet szerettünk volna, amikor egy tokent kellett hibakeresni éles környezetben: adatvédelmet tiszteletben tartó, gyors és ugyanazokra az alapvető primitívekre épül, amelyeket a futási idő használ.