Dekodirati JSON Web Token (JWT)
- Nadzorna plošča
- Dokumentacija
- API
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_idalipermissions) pred iskanjem drugje v avtorizacijski verigi. - Potek branja: pretvori časovni žig
expv č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
- Pridobite JWT za pregled, na primer iz glave
Avtorizacija: Nosilec, iz sejnega piškotka, izlocalStorageiz brskalnika ali iz dnevnika aplikacije. - Prilepite celoten niz v vnosno polje. Trije segmenti morajo ostati ločeni z točk.
- Orodje takoj prikaže glavo, dekodirano v formatirani JSON, z algoritem in vrsto.
- Tovor se nato dekodira in prikaže. Tam vidite vse trditve standardno in po meri.
- Orodje označuje tudi informacije o podpisu (prijavljen algoritem, dolžina), ne da bi to preverili.
- Č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
issinaudna 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,sessionali podobno. localStorage/sessionStorage: ista plošča, Razdelek Lokalna shramba. Številni SPA tam hranijo svoj žeton pod ključemtokenaliauth.
Glava Avtorizacija: zavihek Omrežje, izberite enega Zahteva API, preberite glavoAuthorization: Bearer. Kopirajte samo del zaNosilec.- 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 orodjaGET https://cdrn.fr/api/v1/tools/jwt-decoder- pridobi shemo tega orodjaPOST https://cdrn.fr/api/v1/tools/jwt-decoder/execute- izvede to orodje s JSON payloadom