Sukurti pasirašytą JSON Web Token (JWT)

generuoja pasirašytą JWT (HS256, HS384, HS512) iš JSON payload ir HMAC slapto, paruoštą jūsų API testams arba autentifikavimo tokenams

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 azerty123 yra 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

  1. Įveskite naudingą apkrovą kaip galiojantį JSON. Tai objektas, todėl jis prasideda { ir baigiasi }.
  2. Nurodykite HMAC paslaptį. Pasirinkite ilgą, atsitiktinę gamybos žetonų eilutę.
  3. Pasirinkite algoritmą: HS256 pagal numatytuosius nustatymus, HS384 arba HS512 pagal savo poreikius.
  4. Spustelėkite sukurti. Pasirodo pasirašytas JWT, paruoštas įklijuoti į antraštę Įgaliojimas: nešėjas....
  5. 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 įrankius
  • GET 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