Sukurti pasirašytą JSON Web Token (JWT)
- Skydelis
- Dokumentacija
- API
Kas yra JWT Builder?
JWT Builder yra internetinis įrankis, sukuriantis pasirašytą JSON žiniatinklio prieigos raktą (JWT) iš JSON naudingojo krovinio ir HMAC paslapties. Jis skirtas kūrėjams, kuriems to reikia Norėdami greitai sugeneruoti bandomąjį prieigos raktą, kad patikrintumėte API veikimą, imituokite seansą autentifikuotas „Postman“ arba atkurti klaidą, susijusią su prieigos rakto galiojimo pabaiga arba apimtimi.
Skirtingai nuo mūsų JWT dekoderio, kuris tik nuskaito prieigos raktą
Esant, JWT Builder sudaro pilną prieigos raktą: sukuria antraštę, užkoduoja
naudingoji apkrova, apskaičiuoja HMAC parašą ir viską surenka kompaktišku formatu header.payload.signature
tikisi visos JWT bibliotekos rinkoje.
Kodėl reikia sukurti JWT?
JWT kūrėjas nėra skirtas išduoti gamybos žetonus. Tai visų pirma priemonė kūrimas ir testavimas. Čia pateikiami dažniausiai pasitaikantys scenarijai:
- Integravimo testai: sukurkite nuspėjamus JWT, kad būtų galima atlikti E2E testus kurie pasiekė apsaugotus galutinius taškus nepasitikėdami tikruoju tapatybės teikėju.
- API modeliai: laikinai pakeiskite skambutį į IDP pasirašytu JWT vietoje su ta pačia bandymo paslaptimi.
- Vietinis kūrimas: prisijunkite prie savo užpakalinės programos rankiniu būdu generuodami a prieigos raktas, kuriame yra norimi paraiškos, nereikia pereiti viso OAuth2 srauto.
- Demonstracinės versijos: iliustruokite autentifikavimo kelionę arba darbo eigą, pagrįstą leidimus neturėdami tikro IDP.
- Klaidų atkūrimas: suklastokite pasibaigusio galiojimo žetoną, žetoną su
Neteisingas
aud, prieigos raktas be tam tikrų pretenzijų, skirtas patikrinti klaidų kelius jūsų API. - Pasirinktinio analizatoriaus derinimas: įterpkite JWT, specialiai sukurtus išbandykite naminį analizatorių.
JWT sudėtis
Pasirašytą JWT sudaro trys segmentai, atskirti tašku, kurių kiekvienas yra užkoduotas
Base64URL (Base64 variantas be užpildymo ir su -/_
vietoj +//):
- Antraštė: JSON objektas, apibūdinantis parašo algoritmą ir prieigos rakto tipą,
pvz.,
{"alg":"HS256","typ":"JWT"}. JWT Builder jį automatiškai generuoja iš pasirinkto algoritmo. - Payload: savavališkas JSON objektas, kuriame yra prieigos rakto paraiškos (tema, leidimai, galiojimo laikas). Tai dalis, kurią pateikiate.
- Parašas: HMAC-SHA, apskaičiuotas sujungus
base64url(header) + "." + base64url(payload)su slaptuoju raktu. Tai ji garantuoja žetono vientisumą.
Naudojimo atvejai išsamiai
- API imitacija E2E testavimui: jūsų Cypress arba Playwright rinkinys turi iškviesti API
kuriam reikalinga
Įgaliojimas: Nenešėjas .... Užuot suorganizavęs visišką prisijungimą adresu kiekvieno bandymo metu pasirašome JWT su bendra paslaptimi ir įvedami ją į antraštę. - SSO demonstracija: pateikite sujungtą autentifikavimo kelionę be priklausomybės internetinio IDP.
- Bandymo įrenginys: generuokite deterministinį JWT iš naudingo krovinio, žinomo tarnauja kaip stabili atrama atliekant vienetų bandymus.
- Tinkinto analizatoriaus diagnozė: naminio JWT analizatoriaus bandymas su prieigos raktais sąmoningai minimalus arba sąmoningai keistas (trūksta pretenzijų, netikėti tipai).
- Mokymasis: tiksliai supraskite, kaip kuriamas JWT keisti naudingą apkrovą ir stebėti, kaip keičiasi parašas.
Palaikomi algoritmai: HS256, HS384, HS512
Mūsų įrankis palaiko tris standartinius JWT specifikacijos HMAC algoritmus (RFC 7519):
- HS256: HMAC su SHA-256. 32 baitų parašas. Dažniausiai naudojamas praktikoje, geras kompromisas tarp greičio ir kriptografinio tvirtumo. Rekomenduojama pagal numatytuosius nustatymus.
- HS384: HMAC su SHA-384. 48 baitų parašas. Pritaikytas prie kontekstų, kad reikalauja didesnės saugos ribos.
- HS512: HMAC su SHA-512. 64 baitų parašas. Tvirčiausia, už tokią kainą šiek tiek didesnio žetono.
HMAC arba RSA?
HS* algoritmai yra simetriški: pasirašyti ir patvirtinti naudojamas tas pats raktas. Tai greita ir paprasta, bet tai reiškia, kad bet kuri paslauga, galinti patikrinti prieigos raktą, taip pat yra tokia galintis juos skleisti. Jei reikia atskirti šiuos du vaidmenis (vienas leidėjas, keli vartotojai), naudoti RS256/RS384/RS512 algoritmus (RSA, asimetrinis), kurį galite patikrinti naudodami mūsų JWT tikrintuvą.
Saugumas: saugokite savo paslaptį
HMAC pasirašyto JWT saugumas visiškai priklauso nuo paslapties konfidencialumo. Kai kurios pagrindinės taisyklės:
- Naudokite ilgą, atsitiktinę paslaptį. RFC 7518 rekomenduoja bent dydį
algoritmo išvesties (32 baitai HS256, 48 HS384, 64 HS512). slaptažodis
toks žmogus kaip
azerty123yra trivialiai žiauriai atakuojamas neprisijungus. - Niekada nepasirašykite kliento JWT. Paslaptis būtų rasta kode „JavaScript“ platinamas naršyklei, prieinamas bet kuriam vartotojui. Parašas visada turi likti serverio pusėje.
- Išsaugokite paslaptį aplinkos kintamajame (pvz.,
JWT_SECRET), niekada „Git“ saugykloje. Apsvarstykite galimybę naudoti saugyklą, pvz., HashiCorp Vault, AWS paslapčių tvarkyklę arba Symfony Secrets, priklausomai nuo jūsų krūvos. - Reguliariai pasukite paslaptį (raktų kaitaliojimas), ypač po bet kokio incidento arba asmens, kuris turėjo prieigą prie konfigūracijos, išvykimas.
- JWT Builder skirta testavimui ir mokymuisi. Gamybai, naudokite sistemos JWT biblioteką (lcobucci/jwt, firebase/php-jwt, jose-php).
Gera pretenzijų praktika
Naudingas krovinys yra nemokamas JSON objektas, bet RFC 7519 apibrėžia registruotų pretenzijų rinkinį. kad JWT bibliotekos žino, kaip interpretuoti. Įtraukus tinkamus reikalavimus, jūsų žetonas bus nešiojamas ir išvengia subtilių klaidų:
- iss (išdavėjas): išdavėjo identifikatorius, pvz.
"https://api.example.com". - subject (subject): atitinkamo asmens arba subjekto identifikatorius, dažnai ID vartotojas.
- aud (auditorija): kam skirtas prieigos raktas, kad būtų išvengta pakartotinio prieigos raktas kitoje API.
- exp (galiojimo laikas): Unix laiko žyma, po kurios prieigos raktas nebegalioja. Visada įtraukti, net ir bandomajam prieigos raktui: prieigos raktas be galiojimo pabaigos yra a blogas įprotis, kurį vėliau sunku ištaisyti.
- nbf (ne anksčiau): laiko žyma, prieš kurią prieigos raktas dar negalioja. Naudinga iš anksto išduodant prieigos raktą, kurį galima suaktyvinti vėliau.
- iat (išduota): išdavimo laiko žyma, naudinga registruojant ir atšaukiant.
- jti (JWT ID): unikalus prieigos rakto identifikatorius, būtinas idempotencija ir įdiegti atšaukimo sąrašą.
Tipinis naudingosios apkrovos pavyzdys
{
"iss": "https://api.example.com",
"sub": "vartotojas-12345",
"aud": "programa mobiliesiems",
"iat": 1714723200,
"exp": 1714726800,
"jti": "9f2d6b1e-2c4a-4f8a-9c3a-87a2b8a4b7e1",
"scope": "skaityti:profilis rašyti:profilis"
}
Kaip naudotis įrankiu
- Įveskite naudingą apkrovą kaip galiojantį JSON. Tai objektas, todėl jis prasideda
{ir baigiasi}. - Nurodykite HMAC paslaptį. Pasirinkite ilgą, atsitiktinę gamybos žetonų eilutę.
- Pasirinkite algoritmą: HS256 pagal numatytuosius nustatymus, HS384 arba HS512 pagal savo poreikius.
- Spustelėkite sukurti. Pasirodo pasirašytas JWT, paruoštas įklijuoti į antraštę
Įgaliojimas: nešėjas.... - Tada galite patvirtinti prieigos raktą naudodami tą pačią paslaptį patvirtinkite kelionės pirmyn ir atgal nuoseklumą arba iškoduokite, kad perskaitytumėte jo turinį.
Dažnai užduodami klausimai
Kurį algoritmą pasirinkti: HS256, HS384, HS512?
Beveik visais atvejais HS256 yra tinkamas pasirinkimas. Jis siūlo lygį visiškai pakankamas autentifikavimo žetonų saugumas su kompaktišku parašu (32 baitai) ir greitas skaičiavimas. HS384 ir HS512 yra pateisinami tik kontekste tikslūs norminiai reikalavimai arba jei valdote žetonus, kurių galiojimo laikas labai ilgas. Dydis Didesnis parašas daro kiekvieną HTTP užklausą sunkesnę.
Kaip sugeneruoti RSA porą JWT pasirašyti?
Naudojant OpenSSL dviejose komandose: raktui openssl genrsa -out private.pem 2048
privatus, tada openssl rsa -in private.pem -pubout -out public.pem, kad ištrauktumėte
viešasis raktas. Naujoms paslaugoms dabar rekomenduojame saugos raktus.
3072 bitai arba 4096 bitai. Privatus raktas lieka siuntėjo pusėje; viešasis raktas yra
laisvai platina paslaugoms, kurioms reikia patikrinti žetonus.
Koks rekomenduojamas galiojimo laikas?
Prieigos prieigos raktas: 5–15 minučių. Atnaujinimo žetonui: kelios dienos
kelias savaites, bet su serverio atšaukimo mechanizmu. Kuo daugiau tokeno
ilgaamžis, tuo didesnis veikimo langas nutekėjimo atveju. Jei norite išbandyti JWT, jūs
gali užtrukti dosniau, bet venkite exp kelerius metus:
jie nuteka į Git saugyklas.
Ar galiu pasirašyti naudodamas labai trumpą slaptą raktą?
Techniškai taip, bet labai nerekomenduojama. HMAC paslaptis mažesnė nei
16 baitų yra silpnai atsparus brutalios jėgos atakoms neprisijungus ir randamas
įrankių, kurie per kelias sekundes sulaužo JWT HS256 su mažu slaptumu, pobūdis. The
RFC 7518 rekomenduoja bent algoritmo išvesties dydį: 32 baitai HS256,
48 HS384, 64 HS512. Sukurkite savo paslaptis su
openssl rand -base64 64.
Kodėl mano krovinys atmetamas?
Naudingas krovinys turi būti galiojantis JSON objektas. Dažnos klaidos: vietoj vienos kabutės
dvigubai, papildomas kablelis prieš }, eilutės reikšmė be kabučių. Patvirtinti
pirmiausia JSON su mūsų JSON formatu.
Ar sugeneruotą JWT gali iššifruoti kas nors kitas?
Pasirašytas JWT nešifruotas: naudingoji apkrova užkoduota tik Base64URL. Viskas pasaulis gali tai perskaityti. Jei naudingajame krovinyje yra neskelbtinų duomenų, naudokite JWE formatą (JSON žiniatinklio šifravimas), kuris prideda šifravimą. Mūsų įrankis sukuria JWS (tik pasirašytas).
Užklausos pavyzdys
curl -X POST https://cdrn.fr/api/v1/tools/jwt-builder/execute \
-H "Content-Type: application/json" \
-d '{"payload":"...","secret":"...","algorithm":"HS256"}'
Įvesties schema
| Laukas | Tipas | Privalomas | Numatytasis |
|---|---|---|---|
payload |
text | ✓ | – |
secret |
text | ✓ | – |
algorithm |
choice (HS256, HS384, HS512) | ✓ | HS256 |
Galiniai taškai
GET https://cdrn.fr/api/v1/tools- išvardija visus galimus įrankiusGET https://cdrn.fr/api/v1/tools/jwt-builder- gauna šio įrankio schemąPOST https://cdrn.fr/api/v1/tools/jwt-builder/execute- vykdo šį įrankį su JSON payload