Dekoduoti JSON Web Token (JWT)
- Skydelis
- Dokumentacija
- API
Kas yra JWT (JSON žiniatinklio prieigos raktas)?
JSON žiniatinklio prieigos raktas, sutrumpintai vadinamas JWT (tariama „jot“), yra formatas kompaktiškas, apibrėžtas RFC 7519, leidžiantis transportuoti daugybę pretenzijų (pretenzijos) tarp dviejų šalių. JWT arba JWT tokenas yra šiandien dominuojantis formatas perteikti autentifikuotą tapatybę HTTP API. JWT pasirodo kaip ASCII eilutė sudaryta iš trijų segmentų, atskirtų taškais:
header.payload.signature
Kiekvienas segmentas užkoduotas Base64URL, Base64 variantu be užpildymo
= ir kuris pakeičia + į - ir / į _
kad jis galėtų tekėti per URL arba HTTP antraštę be papildomo pabėgimo.
Svarbu: JWT NĖRA užšifruotas. Standartinis JWT (JWS) formatas yra tiesiog pasirašyta: parašas garantuoja turinio vientisumą, bet nepateikia jokio konfidencialumo. Kiekvienas gali iššifruoti JWT naudingąjį krovinį naudojant paprastą atvirkštinį Base64URL, kaip tai daro šis internetinis jwt decode įrankis.
JWT anatomija
Json žiniatinklio prieigos raktas sudarytas iš trijų labai skirtingų dalių, kurių kiekviena atlieka tam tikrą vaidmenį autentifikavimo mechanizme:
1. Antraštė
Antraštė yra JSON objektas, apibūdinantis, kaip pasirašomas prieigos raktas. Jame yra bent:
alg(algoritmas): naudojamas parašo algoritmas. Tipinės vertės:HS256,RS256,ES256,EdDSA.tipas(tipas): prieigos rakto tipas, beveik visada"JWT".vaikas(rakto ID): pasirenkamas, nurodo, kuris raktas turi būti naudojamas parašui patikrinti. Praktiška, kai yra besisukantis raktų rinkinys (JWKS).
2. Naudingoji apkrova
Naudingame krovinyje yra pretenzijos, t. y. pretenzijos, kurias pateikia emitentas apie vartotoją arba sesiją. RFC 7519 apibrėžia septynis standartinius reikalavimus (registruotas pretenzijos):
iss(išdavėjas): kas išdavė prieigos raktą, pvz."https://accounts.google.com".antrasis(subject): kam priklauso prieigos raktas, praktiškai vartotojo ID.aud(auditorija): kam skirtas prieigos raktas. Venkite žetono išduotas API A yra priimtas API B.exp(galiojimo laikas): Unix laiko žyma, po kurios prieigos raktas nebegalioja.nbf(ne anksčiau): laiko žyma, prieš kurią prieigos raktas nėra vis dar aktyvus.iat(išduota): prieigos rakto išdavimo laiko žyma.jti(JWT ID): unikalus prieigos rakto identifikatorius, naudojamas atšaukimas ir pakartojimo prevencija.
Prie šių standartinių paraiškų paprastai pridedamos tinkintos paraiškos
programa (vaidmenys, apimtis, nuomotojo_id, el. paštas,
leidimai...).
3. Parašas
Parašas yra kriptografinis kondensatas, apskaičiuotas pagal
base64url(header) + "." + base64url(payload) naudodami raktą. Tai ji įrodo
kad niekas nuo transliacijos nepakeitė antraštės ar naudingosios apkrovos. Dažniausiai naudojami algoritmai:
- HS256 / HS384 / HS512: HMAC-SHA simetriškas parašas. Bendrinamas slaptas raktas tarp leidėjo ir tikrintojo. Paprasta, bet netinkama, kai yra daugiau nei vienas vartotojas.
- RS256 / RS384 / RS512: asimetrinis RSA parašas. Siųstuvas pasirašo savo raktu privatus, bet kuris vartotojas patikrina naudodamas atitinkamą viešąjį raktą. De facto standartas OAuth2 ir OpenID Connect.
- ES256 / ES384 / ES512: ECDSA asimetrinis parašas. Tos pačios savybės kaip RS256, bet su daug trumpesniais klavišais ir parašais.
- EdDSA (Ed25519): modernus, greitas ir kompaktiškas asimetrinis parašas.
Dar kartą: parašas saugo vientisumą, o ne konfidencialumą. The naudingą apkrovą gali perskaityti visi, kuriems priklauso prieigos raktas.
Kodėl iššifruoti JWT?
Operacija jwt prieigos rakto iššifravimas atitinka kelis konkrečius kūrėjo poreikius arba saugos inžinierius:
- Autentifikavimo derinimas: jūsų API grąžina 401 arba 403, kurį norite pamatyti
kas iš tikrųjų yra naudingajame krovinyje (
sub,apimtis,vaidmenys,exp), o ne spėlioti. - Patikrinti paraiškas: patvirtinkite, kad prieigos rakte yra paraiška
laukiama (pvz.,
nuomotojo_idarbaleidimai) prieš ieškant kitoje autorizacijos grandinės vietoje. - Skaityti galiojimo laiką: konvertuoti laiko žymą
expį žmogaus datą patvirtinkite, kad prieigos rakto galiojimo laikas baigėsi, arba, priešingai, kad jis vis dar turėtų galioti. - Saugos auditas: užtikrinama, kad trečiosios šalies paslauga nenutekėtų informacijos neskelbtinos naudingos apkrovos (el. laiškai, vidiniai identifikatoriai, asmens duomenys).
- Mokymas ir supratimas: pažiūrėkite konkrečiai, kas a jsonwebtoken, gaunamas iš OAuth teikėjo (Google, Auth0, Keycloak, AWS Cognito), skirtas suprasti mechaniką nesigilindami į dokumentus.
- Viešųjų žetonų tyrinėjimas: patikrinkite JWT, rastą žurnaluose, slapuką arba perimamą OAuth mainą.
Dekoderis prieš tikrintuvą: esminis skirtumas
Abi operacijos atrodo panašios, tačiau jos neturi nieko bendro su saugumo garantijomis:
- JWT iššifravimas susideda iš eilutės padalijimo
.ir pirmiems dviem segmentams pritaikykite atvirkštinį Base64URL. Tai paprasta skaityti, ranka pasiekiama bet kurio trijų eilučių scenarijaus. Nėra parašo patvirtinimo nėra atlikta. - JWT patikrinimas susideda iš parašo perskaičiavimo iš antraštės, naudingą krovinį ir raktą, tada palyginkite rezultatą su žetono parašu. tai kuri garantuoja, kad prieigos raktas nebuvo sugadintas.
Praktinė išvada: dekodavimu pasitikėti neverta. Kol parašas nebuvo patikrinta naudojant teisingą raktą, naudingosios apkrovos turinys gali būti visiškai netikras. Dėl pasitikėjimo etapą, naudokite mūsų JWT patvirtinimo priemonę.
Kaip juo naudotis
- Pateikite JWT patikrinti, pavyzdžiui, iš antraštės
Prieiga: nešiklis, iš seanso slapuko, išlocalStorageiš naršyklės arba programos žurnalo. - Įklijuokite visą eilutę į įvesties lauką. Trys segmentai turi likti atskirti taškų.
- Įrankis iš karto rodo antraštę, iššifruotą į formatuotą JSON su algoritmas ir tipas.
- Tada naudingoji apkrova iššifruojama ir rodoma. Ten matote visas pretenzijas standartinis ir pritaikytas.
- Įrankis taip pat nurodo parašo informaciją (deklaruojamas algoritmas, ilgio), jo nepatikrinus.
- Jei norite patvirtinti, kad prieigos raktas nebuvo sugadintas, pereikite prie mūsų JWT patvirtinimo priemonė su numatomu viešuoju raktu arba paslaptimi.
Visas dekodavimas atliekamas jūsų naršyklėje „JavaScript“: jūsų prieigos raktas niekada nesiunčiamas į mūsų serverius.
JWT ir saugumas: spąstų, kurių reikia vengti
NIEKADA nesaugokite slaptų duomenų pasirašyto JWT naudingojoje apkrovoje.
Slaptažodžiai, kredito kortelių numeriai, medicininiai duomenys, API paslaptys, identifikatoriai kritinės vidinės dalys: viską, kas yra naudingoje apkrovoje,gali perskaityti visi priklauso prieigos raktas, įskaitant patį naudotoją naudojant kūrėjo įrankius jo naršyklė. Parašas nieko neslepia, tik įrodo, kad išdavėjas tikrai kuo jis teigia esąs.
Kelias auksines taisykles, kaip tinkamai naudoti JWT gamyboje:
- Visada patikrinkite serverio parašą prieš suteikdami bet kokias teises. Mūsų JWT patvirtinimo priemonė tiksliai iliustruoja šią operaciją.
- Viešoms API teikti pirmenybę RS256 arba ES256, o ne HS256. Parašas asimetriškas vengia dalytis paslaptimi tarp siųstuvo ir kiekvieno vartotojo.
- Visada gerbkite reikalavimą
exp. JWT be galiojimo pabaigos arba su per toli iškvėpimas yra uždelsto veikimo bomba nutekėjimo atveju. - Patvirtinkite
issiraudserverio pusėje, kad išvengtumėte teisėtas prieigos raktas, išduotas kitai paslaugai, priimtas per klaidą. - Atmeskite
alg: "none"patvirtinimo pusėje. Tai klasikinis trūkumas kuri leidžia užpuolikui suklastoti bet kokį naudingąjį krovinį. - Trumpą tarnavimo laiką (pavyzdžiui, 15 minučių) ir suporuokite su a atnaujinti prieigos raktą ilgiau, bet atšaukti serverio pusėje.
Iškoduoto JWT žetono pavyzdys
Čia yra tipiškas JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiSm9obi IsImlhdCI6MTUxNjIzOTAyMn0.jrU9j8LZcRK2_BZjqXjU7lEpJbkqmXfTQIu9vT45j-I
Kai iškoduota, pateikiamas jo turinys:
// Antraštė
{
"alg": "HS256",
"tipas": "JWT"
}
// Naudinga apkrova
{
"sub": "123",
"vardas": "Jonas",
"iat": 1516239022
}
// Parašas (dvejetainis, užkoduotas Base64URL)
HMACSHA256(
base64url(header) + "." + base64url (naudingoji apkrova),
paslaptis
)
Kur rasti JWT kopijuoti?
Praktiškai JWT iššifruoti (iššifravimo prasme) dažniausiai gaunamas iš vieno iš šių vietos:
- HTTP slapukas: atidarykite kūrimo įrankių (F12) skirtuką
Programa arba Saugykla, tada Slapukai. Pastebėkite pavadintą slapuką
prieigos_tokenas,jwt,seansasar panašiai. localStorage/sessionStorage: tas pats skydelis, Vietinė saugykla. Daugelis SPA saugo savo žetoną ten po raktutokenarbaauth.Prieigaantraštė: skirtuke Tinklas pasirinkite vieną API užklausą, perskaitykite antraštęAuthorization: Bearer. Nukopijuokite tik dalis poNešėjas.- Serverio žurnalai: JWT kartais pasirodo šliuzo arba atvirkštinis tarpinis serveris (vengiama gamyboje, bet naudinga derinant).
Dažnai užduodami klausimai
Užklausos pavyzdys
curl -X POST https://cdrn.fr/api/v1/tools/jwt-decoder/execute \
-H "Content-Type: application/json" \
-d '{"token":"..."}'
Įvesties schema
| Laukas | Tipas | Privalomas | Numatytasis |
|---|---|---|---|
token |
text | ✓ | – |
Galiniai taškai
GET https://cdrn.fr/api/v1/tools- išvardija visus galimus įrankiusGET https://cdrn.fr/api/v1/tools/jwt-decoder- gauna šio įrankio schemąPOST https://cdrn.fr/api/v1/tools/jwt-decoder/execute- vykdo šį įrankį su JSON payload