Stvoriti potpisani JSON Web Token (JWT)
- Nadzorna ploča
- Dokumentacija
- API
Što je JWT Builder?
JWT Builder je online alat koji proizvodi potpisani JSON web token (JWT) iz JSON korisnog sadržaja i HMAC tajne. Namijenjen je programerima koji trebaju za brzo generiranje testnog tokena za provjeru ponašanja API-ja, simulacija sesije autentificirani u Postmanu ili reproducirati grešku povezanu s istekom ili opsegom tokena.
Za razliku od našeg JWT dekodera, koji samo čita token
postojeći, JWT Builder čini kompletan token: gradi zaglavlje, kodira
korisni teret, izračunava HMAC potpis i sastavlja sve u kompaktnom formatu header.payload.signature
očekuju sve JWT knjižnice na tržištu.
Zašto generirati JWT?
JWT builder nije namijenjen za izdavanje proizvodnih tokena. To je prije svega alat za razvoj i testiranje. Ovo su najčešći scenariji:
- Integracijski testovi: proizvedite predvidljive JWT-ove za pokretanje E2E testova koji pogađaju zaštićene krajnje točke bez oslanjanja na stvarnog pružatelja identiteta.
- API Mocks: Privremeno zamijenite poziv IdP-u s potpisanim JWT-om lokalno s istom testnom tajnom.
- Lokalni razvoj: povežite se s vlastitom pozadinom ručnim generiranjem a token koji sadrži željene zahtjeve, bez prolaska kroz cijeli tok OAuth2.
- Demonstracije: ilustrirajte put autentifikacije ili tijek rada na temelju dopuštenja bez stvarnog IdP-a pri ruci.
- Reprodukcija bugova: krivotvorite istekli token, token s
Neispravan
aud, token bez određenih tvrdnji, za testiranje putova pogreške vaš API. - Uklanjanje pogrešaka prilagođenog parsera: ubacite JWT-ove posebno konstruirane za testirajte domaći parser.
Sastav JWT-a
Potpisani JWT sastoji se od tri segmenta odvojena točkom, a svaki je kodiran u
Base64URL (varijanta Base64 bez ispune i s -/_ na
umjesto +//):
- Zaglavlje: JSON objekt koji opisuje algoritam potpisa i vrstu tokena,
na primjer
{"alg":"HS256","typ":"JWT"}. JWT Builder ga automatski generira iz algoritma koji odaberete. - Korisni teret: proizvoljni JSON objekt koji sadrži zahtjeve tokena (predmet, dozvole, datumi isteka). Ovo je dio koji vi dajete.
- Potpis: HMAC-SHA izračunat ulančavanjem
base64url(zaglavlje) + "." + base64url(payload)s vašim tajnim ključem. Ona je ta koja jamči cjelovitost tokena.
Detaljno o slučajevima korištenja
- API mock za E2E testiranje: vaš Cypress ili Playwright paket mora pozivati API
koji zahtijeva
Autorizaciju: Nositelj .... Umjesto orkestriranja potpune prijave na svaki test, u hodu potpisujemo JWT s dijeljenom tajnom i ubacujemo je u zaglavlje. - SSO Demo: predstavite put sjedinjene provjere autentičnosti bez ovisnosti mrežnog IdP-a.
- Test Fixture: generirajte deterministički JWT iz korisnog opterećenja poznatog služiti kao stabilna jedinica u jediničnim testovima.
- Dijagnostika prilagođenog parsera: testiranje domaćeg JWT parsera s tokenima namjerno minimalan ili namjerno bizaran (tvrdnje koje nedostaju, neočekivane vrste).
- Učenje: konkretno shvatite kako je ugrađen JWT modificiranje nosivosti i promatranje promjene potpisa.
Podržani algoritmi: HS256, HS384, HS512
Naš alat podržava tri standardna algoritma HMAC JWT specifikacije (RFC 7519):
- HS256: HMAC sa SHA-256. Potpis od 32 bajta. Najčešće korišten u praksi, dobar kompromis između brzine i kriptografske čvrstoće. Preporučeno prema zadanim postavkama.
- HS384: HMAC sa SHA-384. 48-bajtni potpis. Prilagođeno kontekstima koji zahtijevaju veću sigurnosnu marginu.
- HS512: HMAC sa SHA-512. Potpis od 64 bajta. Najrobusniji, po cijeni malo većeg žetona.
HMAC ili RSA?
Algoritmi HS* su simetrični: za potpisivanje i provjeru koristi se isti ključ. Brzo je i jednostavno, ali znači da je to i svaka usluga koja može potvrditi token sposoban ih emitirati. Ako trebate razdvojiti ove dvije uloge (jedan izdavatelj, više potrošači), okrenuti se algoritmima RS256/RS384/RS512 (RSA, asimetrični), što možete provjeriti s našim JWT verifikatorom.
Sigurnost: zaštita vaše tajne
Sigurnost JWT-a potpisanog u HMAC-u u potpunosti se oslanja na povjerljivost tajne. Neka osnovna pravila:
- Koristite dugačku, nasumično odabranu tajnu. RFC 7518 preporučuje barem veličinu
izlaza algoritma (32 bajta za HS256, 48 za HS384, 64 za HS512). Lozinka
čovjeka poput
azerty123trivijalno je brute force moguće napasti izvan mreže. - Nikada ne potpisujte JWT na strani klijenta. Tajna bi se našla u šifri JavaScript distribuiran pregledniku, izložen svakom korisniku. Potpis uvijek mora ostati strana poslužitelja.
- Pohranite tajnu u varijablu okruženja (npr.
JWT_SECRET), nikada u Git repozitoriju. Razmislite o korištenju trezora kao što je HashiCorp Vault, AWS Secrets Manager ili Symfony Secrets ovisno o vašem skupu. - Redovito otkrivajte tajnu (rotacija ključeva), posebno nakon bilo kakvog incidenta ili odlazak osobe koja je imala pristup konfiguraciji.
- JWT Builder je za testiranje i učenje. Za proizvodnju, koristite JWT biblioteku okvira (lcobucci/jwt, firebase/php-jwt, jose-php).
Dobra praksa potraživanja
Korisni teret je besplatni JSON objekt, ali RFC 7519 definira skup registriranih zahtjeva koje JWT knjižnice znaju interpretirati. Uključivanje pravih zahtjeva čini vaš token prenosivim i izbjegava suptilne greške:
- iss (izdavatelj): identifikator izdavatelja, na primjer
"https://api.example.com". - sub (subject): identifikator dotične osobe ili entiteta, često ID korisnik.
- aud (publika): kome je token namijenjen, kako bi se spriječilo ponovno korištenje token na drugom API-ju.
- exp (vrijeme isteka): Unix vremenska oznaka nakon koje token više nije valjan. Uvijek uključi, čak i za testni token: token bez isteka je a lošu naviku koju je kasnije teško ispraviti.
- nbf (ne prije): vremenska oznaka prije koje token još nije valjan. Korisno za prethodno izdavanje tokena koji se kasnije može aktivirati.
- iat (izdano u): vremenska oznaka izdavanja, korisna za bilježenje i opoziv.
- jti (JWT ID): jedinstveni identifikator tokena, bitan za idempotencija i implementirati popis opoziva.
Tipični primjer korisnog opterećenja
{
"iss": "https://api.example.com",
"sub": "korisnik-12345",
"aud": "mobilna aplikacija",
"iat": 1714723200,
"exp": 1714726800,
"jti": "9f2d6b1e-2c4a-4f8a-9c3a-87a2b8a4b7e1",
"opseg": "čitanje:profil pisanje:profil"
}
Kako koristiti alat
- Unesite sadržaj kao važeći JSON. To je objekt, pa počinje s
{i završava s}. - Navedite HMAC tajnu. Odaberite dugi, nasumični niz za proizvodne tokene.
- Odaberite algoritam: HS256 prema zadanim postavkama, HS384 ili HS512 prema vašim potrebama.
- Kliknite stvori. Pojavljuje se potpisani JWT, spreman za lijepljenje u zaglavlje
Autorizacija: Nositelj .... - Tada možete potvrditi token s istom tajnom za potvrdite dosljednost povratnog putovanja ili dekodirajte za ponovno čitanje njegov sadržaj.
Često postavljana pitanja
Koji algoritam odabrati: HS256, HS384, HS512?
Za gotovo sve slučajeve, HS256 je pravi izbor. Nudi razinu savršeno dovoljna sigurnost za autentifikacijske tokene, s kompaktnim potpisom (32 bajta) i brzo izračunavanje. HS384 i HS512 opravdani su samo u kontekstu preciznim regulatornim zahtjevima ili ako upravljate tokenima s vrlo dugim vijekom trajanja. Veličina od Veći potpis čini svaki HTTP zahtjev težim.
Kako mogu generirati RSA par za potpisivanje svojih JWT-ova?
S OpenSSL-om u dvije naredbe: openssl genrsa -out private.pem 2048 za ključ
privatno, zatim openssl rsa -in private.pem -pubout -out public.pem za izdvajanje
javni ključ. Za nove usluge sada preporučujemo sigurnosne ključeve.
3072 bita ili 4096 bita. Privatni ključ ostaje na strani pošiljatelja; javni ključ je
besplatno distribuira servisima koji trebaju verificirati tokene.
Koje je preporučeno vrijeme isteka?
Za pristupni token: 5 do 15 minuta. Za žeton za osvježenje: nekoliko dana
nekoliko tjedana, ali s mehanizmom opoziva na strani poslužitelja. Što je token više
dugovječan, veći je radni prozor u slučaju curenja. Za probne JWT-ove, vi
može potrajati izdašnije, ali izbjegavajte exp nekoliko godina:
na kraju cure u Git repozitorije.
Mogu li se potpisati vrlo kratkim tajnim ključem?
Tehnički da, ali se strogo ne preporučuje. HMAC tajna manja od
16 bajtova slabo je otporan na offline brute force napade i nalazi se u
priroda alata koji razbijaju JWT HS256 s niskom tajnom u sekundi. The
RFC 7518 preporučuje barem veličinu izlaza algoritma: 32 bajta za HS256,
48 za HS384, 64 za HS512. Generirajte svoje tajne s
openssl rand -base64 64.
Zašto je moj korisni teret odbijen?
Korisni teret mora biti važeći JSON objekt. Uobičajene pogreške: jednostruki navodnici umjesto
udvostručuje, dodatni zarez ispred }, vrijednost bez navodnika za niz. Potvrdi
prvo svoj JSON s našim formatorom za JSON.
Može li generirani JWT dešifrirati netko drugi?
Potpisani JWT nije šifriran: sadržaj je samo kodiran Base64URL. sve svijet to može pročitati. Ako sadržaj sadrži osjetljive podatke, koristite JWE format (JSON Web Encryption) koji dodaje enkripciju. Naš alat proizvodi JWS (samo potpisan).
Primjer zahtjeva
curl -X POST https://cdrn.fr/api/v1/tools/jwt-builder/execute \
-H "Content-Type: application/json" \
-d '{"payload":"...","secret":"...","algorithm":"HS256"}'
Ulazna shema
| Polje | Tip | Obavezno | Zadano |
|---|---|---|---|
payload |
text | ✓ | – |
secret |
text | ✓ | – |
algorithm |
choice (HS256, HS384, HS512) | ✓ | HS256 |
Krajnje točke
GET https://cdrn.fr/api/v1/tools- ispisuje sve dostupne alateGET https://cdrn.fr/api/v1/tools/jwt-builder- dohvaća shemu ovog alataPOST https://cdrn.fr/api/v1/tools/jwt-builder/execute- izvršava ovaj alat s JSON payloadom