§

Illeszd be a JWT-t

Az elemzés és az aláírás-ellenőrzés is helyben fut. Semmi sem kerül a tokennel kapcsolatban szerverre.
§

Fejléc

json
§

Adat

json
§

Aláírás ellenőrzése

Adj meg egy titkos kulcsot az aláírás ellenőrzéséhez.

A JSON Web Tokenek működtetik az amerikai hitelesítési rendszert – az AWS Cognito ID tokenektől kezdve az Auth0 és Okta hozzáférési tokeneken át a Stripe által aláírt eseménytokenekig, amelyeket a webhook-fogadóknak ellenőrizniük kell. Az Egyesült Királyságban a FAPI-profillal működő nyílt banki keretrendszerre támaszkodó pénzügyi szolgáltatási csapatok ugyanazt az RFC 7519-es borítékot használják, ahol az `iss` állítás az ASPSP jól ismert JWKS-végpontjára mutat. Ez a dekódoló a három Base64URL-szegmenst a böngészőben bontja szét, megjeleníti a fejlécet, az adatokat és az aláírást, és dekódolja a szabványos állításokat, mint az `exp`, `iat` és `nbf`, megfelelő időzóna-megjelenítéssel – anélkül, hogy a hordozó tokened valaha is elhagyná a lapot vagy megjelenne egy szerveroldali naplóban.

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:

  1. A token pontokra bontása pontosan három nem üres szegmensre. Bármilyen más alakzat hibás.
  2. 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).
  3. 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.
  4. 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, XMLHttpRequest vagy sendBeacon hí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 és crypto.subtle.sign fü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.