Dekodirati JSON Web Token (JWT)

dekodira vaš JWT token (JSON Web Token) in prikazuje informacije, ki jih vsebuje, na berljiv in strukturiran način

Kaj je JWT (spletni žeton JSON)?

Spletni žeton JSON, skrajšan za JWT (izgovarja se "jot"), je oblika kompakten, opredeljen z RFC 7519, ki omogoča prenos vrste zahtevkov (terjatve) med dvema strankama. JWT ali žeton JWT je danes prevladujoča oblika za posredovanje overjene identitete v HTTP API. JWT se prikaže kot niz ASCII sestavljen iz treh segmentov, ločenih s točkami:

header.payload.signature

Vsak segment je kodiran v Base64URL, različici Base64 brez oblazinjenja = in ki zamenja + s - in / s _ tako da lahko teče skozi URL ali glavo HTTP brez dodatnega ubežanja.

Pomembno: JWT NI šifriran. Standardni format JWT (JWS) je preprosto podpisano: podpis zagotavlja celovitost vsebine, vendar ne zagotavlja nobene zaupnosti. Vsakdo lahko dekodira koristni tovor JWT s preprostim povratnim Base64URL, kot to počne to spletno orodje za jwt decode.

Anatomija JWT

Spletni žeton json je sestavljen iz treh zelo različnih delov, od katerih ima vsak svojo vlogo v mehanizmu za preverjanje pristnosti:

1. Glava

Glava je predmet JSON, ki opisuje, kako je žeton podpisan. Vsebuje najmanj:

  • alg (algoritem): uporabljeni algoritem podpisa. Tipične vrednosti: HS256, RS256, ES256, EdDSA.
  • typ (vrsta): vrsta žetona, skoraj vedno "JWT".
  • kid (ID ključa): neobvezno, določa, kateri ključ je treba uporabiti za overitev podpisa. Praktično v prisotnosti vrtljivega kompleta ključev (JWKS).

2. Tovor

Tovor vsebuje terjatve, to je trditve, ki jih izda izdajatelj o uporabniku ali seji. RFC 7519 opredeljuje sedem standardnih zahtevkov (registriranih zahtevki):

  • iss (izdajatelj): kdo je na primer izdal žeton "https://accounts.google.com".
  • sub (subject): kdo je lastnik žetona v praksi ID uporabnika.
  • aud (občinstvo): komu je žeton namenjen. Izogibajte se žetonu izdano za API A, sprejema API B.
  • exp (čas poteka): časovni žig Unix, po katerem žeton ne velja več.
  • nbf (ne prej): časovni žig, pred katerim žeton ni še vedno aktiven.
  • iat (izdano na): časovni žig izdaje žetona.
  • jti (JWT ID): enolični identifikator žetona, ki se uporablja za preklic in preprečitev ponovnega predvajanja.

Tem standardnim zahtevkom so na splošno dodani zahtevki po meri, specifični za aplikacija (vloge, obseg, tenant_id, e-pošta, dovoljenja...).

3. Podpis

Podpis je kriptografski kondenzat, izračunan na base64url(glava) + "." + base64url(payload) z uporabo ključa. Ona je tista, ki dokazuje da nihče ni spremenil glave ali tovora od oddajanja. Najpogostejši algoritmi:

  • HS256 / HS384 / HS512: simetrični podpis HMAC-SHA. Skupni tajni ključ med izdajateljem in preveriteljem. Enostavno, vendar neprimerno, če je potrošnikov več.
  • RS256 / RS384 / RS512: asimetrični podpis RSA. Oddajnik se podpiše s svojim ključem zasebno, vsak potrošnik preveri z ustreznim javnim ključem. De facto standard za OAuth2 in OpenID Connect.
  • ES256 / ES384 / ES512: asimetrični podpis ECDSA. Enake lastnosti kot RS256, vendar z veliko krajšimi ključi in podpisi.
  • EdDSA (Ed25519): moderen, hiter in kompakten asimetričen podpis.

Še enkrat: podpis ščiti celovitost, ne zaupnosti. The koristni tovor ostane berljiv vsem, ki imajo žeton.

Zakaj dekodirati JWT?

Operacija dekodiranja žetona jwt izpolnjuje več konkretnih potreb razvijalca ali varnostni inženir:

  • Odpravljanje napak pri preverjanju pristnosti: vaš API vrne 401 ali 403, kar želite videti kaj je dejansko v tovoru (sub, scope, roles, exp) namesto ugibanja.
  • Preveri zahtevke: potrdite, da žeton vsebuje zahtevek pričakovano (npr. tenant_id ali permissions) pred iskanjem drugje v avtorizacijski verigi.
  • Potek branja: pretvori časovni žig exp v človeški datum za potrdite, da je žeton potekel ali, nasprotno, da bi moral biti še veljaven.
  • Varnostna revizija: zagotavljanje, da storitev tretjih oseb ne uhaja informacij občutljivo v vsebini (e-pošta, notranji identifikatorji, osebni podatki).
  • Usposabljanje in razumevanje: natančno poglejte, kaj a jsonwebtoken, ki prihaja od ponudnika OAuth (Google, Auth0, Keycloak, AWS Cognito) za razumeti mehaniko brez potapljanja v dokumente.
  • Raziskovanje javnih žetonov: preglejte JWT, najden v dnevnikih, v piškotek ali v prestreljivi izmenjavi OAuth.

Dekoder proti preverjanju: kritična razlika

Obe operaciji se zdita podobni, vendar nimata nič opraviti v smislu varnostnih jamstev:

  • Dekodiranje JWT je sestavljeno iz razdelitve niza na . in uporabite obratni Base64URL za prva dva segmenta. Je preprosto branje, na dosegu roke katere koli trivrstične pisave. Brez preverjanja podpisa ni končano.
  • Preverjanje JWT je sestavljeno iz ponovnega izračuna podpisa iz glave, obremenitev in ključ, nato pa rezultat primerja s podpisom v žetonu. je ki zagotavlja, da žeton ni bil spremenjen.

Praktični zaključek: dekodiranju ni vredno zaupati. Dokler je podpis ni bilo preverjeno s pravilnim ključem, je lahko vsebina tovora popolnoma lažna. Za fazi zaupanja, uporabite naš JWT Verifier.

Kako ga uporabljati

  1. Pridobite JWT za pregled, na primer iz glave Avtorizacija: Nosilec , iz sejnega piškotka, iz localStorage iz brskalnika ali iz dnevnika aplikacije.
  2. Prilepite celoten niz v vnosno polje. Trije segmenti morajo ostati ločeni z točk.
  3. Orodje takoj prikaže glavo, dekodirano v formatirani JSON, z algoritem in vrsto.
  4. Tovor se nato dekodira in prikaže. Tam vidite vse trditve standardno in po meri.
  5. Orodje označuje tudi informacije o podpisu (prijavljen algoritem, dolžina), ne da bi to preverili.
  6. Če želite potrditi, da žeton ni bil spremenjen, preklopite na naš JWT Verifier s pričakovanim javnim ključem ali skrivnostjo.

Vse dekodiranje poteka v vašem brskalniku v JavaScriptu: vaš žeton ni nikoli poslan na naše strežnike.

JWT in varnost: pasti, ki se jim je treba izogniti

NIKOLI ne shranjujte občutljivih podatkov v obremenitvi podpisanega JWT.

Gesla, številke kreditnih kartic, zdravstveni podatki, API skrivnosti, identifikatorji kritične notranjosti: vse v tovoru jeberljivo vsem ima v lasti žetonvključno z uporabnikom samim prek orodij za razvijalce njegov brskalnik. Podpis ne prikriva ničesar, le dokazuje, da je izdajatelj to res kdo trdi, da je.

Nekaj zlatih pravil za pravilno uporabo JWT v proizvodnji:

  • Vedno preverite podpis na strani strežnika, preden podelite kakršne koli pravice. Naš JWT Verifier ponazarja natančno to operacijo.
  • Raje RS256 ali ES256 kot HS256 za javne API-je. Podpis asimetrična se izogiba delitvi skrivnosti med oddajnikom in vsakim potrošnikom.
  • Vedno upoštevajte trditev exp. JWT brez poteka ali z predaleč izdih je tempirana bomba v primeru puščanja.
  • Potrdite iss in aud na strani strežnika, da preprečite zakoniti žeton, izdan za drugo storitev, je sprejet pomotoma.
  • Zavrni alg: "none" na strani preverjanja. To je klasična napaka ki napadalcu omogoča ponarejanje kakršnega koli koristnega tovora.
  • Življenjska doba naj bo kratka (na primer 15 minut) in jo združite z žeton osveževanja daljši, vendar ga je mogoče preklicati na strani strežnika.

Primer dekodiranega žetona JWT

Tu je tipičen JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiSm9obi IsImlhdCI6MTUxNjIzOTAyMn0.jrU9j8LZcRK2_BZjqXjU7lEpJbkqmXfTQIu9vT45j-I

Po dekodiranju je tukaj njegova vsebina:

// Glava
{
  "alg": "HS256",
  "vrsta": "JWT"
}

// Tovor
{
  "pod": "123",
  "ime": "Janez",
  "iat": 1516239022
}

// Podpis (binarno, kodirano Base64URL)
HMACSHA256(
  base64url(glava) + "." + base64url(tovor),
  skrivnost
)

Kje najti JWT za kopiranje?

V praksi JWT za dešifriranje (v smislu dekodiranja) največkrat prihaja iz enega od teh lokacije:

  • HTTP piškotek: odprite razvojna orodja (F12), zavihek Aplikacija ali Shramba, nato Piškotki. Poiščite poimenovani piškotek access_token, jwt, session ali podobno.
  • localStorage / sessionStorage: ista plošča, Razdelek Lokalna shramba. Številni SPA tam hranijo svoj žeton pod ključem token ali auth.
  • Glava
  • Avtorizacija: zavihek Omrežje, izberite enega Zahteva API, preberite glavo Authorization: Bearer . Kopirajte samo del za Nosilec .
  • Dnevniki strežnika: JWT se včasih pojavi v dnevnikih prehoda ali povratni proxy (se je treba izogibati v produkciji, vendar uporaben pri odpravljanju napak).

Pogosta vprašanja

Primer zahteve

curl -X POST https://cdrn.fr/api/v1/tools/jwt-decoder/execute \
  -H "Content-Type: application/json" \
  -d '{"token":"..."}'

Vhodna shema

Polje Tip Obvezno Privzeto
token text

Končne točke

  • GET https://cdrn.fr/api/v1/tools - izpiše vsa razpoložljiva orodja
  • GET https://cdrn.fr/api/v1/tools/jwt-decoder - pridobi shemo tega orodja
  • POST https://cdrn.fr/api/v1/tools/jwt-decoder/execute - izvede to orodje s JSON payloadom