Luo allekirjoitettu JSON Web Token (JWT)
- Hallintapaneeli
- Dokumentaatio
- API
Mikä on JWT Builder ?
JWT Builder on verkkotyökalu, joka tuottaa allekirjoitetun JSON Web Tokenin (JWT) JSON-hyötykuormasta ja HMAC-salaisuudesta. Se on suunnattu kehittäjille, joiden on luotava nopeasti testitunnus tarkistaakseen APIn toiminnan, simuloidakseen autentikoitua istuntoa Postmanissa tai toisintaakseen vanhentumiseen tai tunnuksen laajuuteen liittyvän bugin.
Toisin kuin JWT-dekooderimme, joka vain lukee olemassa olevan tunnuksen,
JWT Builder valmistaa täydellisen tunnuksen : se rakentaa otsikon, koodaa hyötykuorman,
laskee HMAC-allekirjoituksen ja kokoaa kaiken tiiviiseen header.payload.signature-muotoon,
jota kaikki markkinoiden JWT-kirjastot odottavat.
Miksi luoda JWT ?
JWT-muodostinta ei ole tarkoitettu tuotantotunnusten luomiseen. Se on ensisijaisesti kehitys- ja testaustyökalu. Tässä on yleisimmät skenaariot :
- Integraatiotestit : ennustettavien JWT-tunnusten luominen E2E-testeihin, jotka kutsuvat suojattuja päätepisteitä ilman riippuvuutta todellisesta identiteetintarjoajasta.
- API-mockit : identiteetintarjoajan kutsun korvaaminen tilapäisesti paikallisesti allekirjoitetulla JWT-tunnuksella käyttäen samaa testisalaisuutta.
- Paikallinen kehitys : kirjautuminen omaan taustajärjestelmään luomalla käsin halutut väitteet (claims) sisältävä tunnus ilman, että tarvitsee käydä läpi koko OAuth2-vuota.
- Demot : autentikointipolun tai käyttöoikeuksiin perustuvan työnkulun havainnollistaminen ilman todellista identiteetintarjoajaa.
- Bugien toisintaminen : vanhentuneen tunnuksen, virheellisen
aud-kentän tai puuttuvia väitteitä sisältävän tunnuksen luominen APIn virhepolkujen testaamiseksi. - Mukautetun jäsentimen virheenkorjaus : erityisesti muotoiltujen JWT-tunnusten syöttäminen itsetehdyn jäsentimen testaamiseksi.
JWT-tunnuksen rakenne
Allekirjoitettu JWT koostuu kolmesta pisteellä erotetusta osasta, joista jokainen on
Base64URL-koodattu (Base64-muunnos ilman täyttömerkkejä ja käyttäen merkkejä
-/_ merkkien +// sijasta) :
- Header (otsikko) : JSON-objekti, joka kuvaa allekirjoitusalgoritmin ja tunnuksen
tyypin, esimerkiksi
{"alg":"HS256","typ":"JWT"}. JWT Builder luo sen automaattisesti valitsemasi algoritmin perusteella. - Payload (hyötykuorma) : vapaavalintainen JSON-objekti, joka sisältää tunnuksen väitteet (claims, kuten kohde, käyttöoikeudet, vanhentumispäivät). Tämä on osa, jonka sinä annat.
- Signature (allekirjoitus) : HMAC-SHA, joka on laskettu yhdistelmästä
base64url(header) + "." + base64url(payload)salaisella avaimellasi. Se takaa tunnuksen eheyden.
Käyttötapaukset yksityiskohtaisesti
- API-mock E2E-testeihin : Cypress- tai Playwright-testipakettisi on kutsuttava APIa,
joka vaatii
Authorization: Bearer ...-otsikon. Sen sijaan, että jokaiseen testiin järjestettäisiin täydellinen sisäänkirjautuminen, allekirjoitetaan JWT lennosta jaetulla salaisuudella ja syötetään se otsikkoon. - SSO-demo : federoidun autentikointipolun esittäminen ilman riippuvuutta verkossa olevasta identiteetintarjoajasta.
- Testi-fixture : deterministisen JWT:n luominen tunnetusta hyötykuormasta käytettäväksi vakaana fixturena yksikkötesteissä.
- Mukautetun jäsentimen diagnostiikka : itsetehdyn JWT-jäsentimen testaaminen tarkoituksellisen minimaalisilla tai oudoilla tunnuksilla (puuttuvat väitteet, odottamattomat tyypit).
- Oppiminen : ymmärtää käytännössä, miten JWT rakentuu muuttamalla hyötykuormaa ja seuraamalla allekirjoituksen muuttumista.
Tuetut algoritmit : HS256, HS384, HS512
Työkalumme tukee JWT-spesifikaation (RFC 7519) kolmea vakio-HMAC-algoritmia :
- HS256 : HMAC SHA-256:lla. 32 tavun allekirjoitus. Käytännössä käytetyin, hyvä kompromissi nopeuden ja kryptografisen vahvuuden välillä. Suositellaan oletuksena.
- HS384 : HMAC SHA-384:lla. 48 tavun allekirjoitus. Soveltuu yhteyksiin, jotka vaativat suurempaa turvamarginaalia.
- HS512 : HMAC SHA-512:lla. 64 tavun allekirjoitus. Vankin, hieman suuremman tunnuksen kustannuksella.
HMAC vai RSA ?
HS*-algoritmit ovat symmetrisiä : samaa avainta käytetään allekirjoittamiseen ja varmistamiseen. Se on yksinkertaista ja nopeaa, mutta se tarkoittaa, että jokainen palvelu, joka pystyy varmistamaan tunnuksen, pystyy myös luomaan sellaisen. Jos sinun on erotettava nämä kaksi roolia (vain yksi myöntäjä, useita kuluttajia), käytä RS256/RS384/RS512-algoritmeja (RSA, epäsymmetriset), jotka voit varmistaa JWT-varmistimellamme.
Turvallisuus : salaisuutesi suojaaminen
HMAC-allekirjoitetun JWT:n turvallisuus perustuu täysin salaisuuden luottamuksellisuuteen. Muutamia perussääntöjä :
- Käytä pitkää ja satunnaista salaisuutta. RFC 7518 suosittelee vähintään algoritmin
tulosteen kokoa (32 tavua HS256:lle, 48 tavua HS384:lle, 64 tavua HS512:lle). Inhimillinen salasana,
kuten
azerty123, on triviaali kohde offline-murtamiselle. - Älä koskaan allekirjoita JWT:tä asiakaspuolella. Salaisuus päätyisi selaimeen jaeltuun JavaScript-koodiin, jolloin se paljastuisi kaikille käyttäjille. Allekirjoituksen on aina pysyttävä palvelinpuolella.
- Tallenna salaisuus ympäristömuuttujaan (esim.
JWT_SECRET), ei koskaan Git-tietovarastoon. Harkitse holvin, kuten HashiCorp Vaultin, AWS Secrets Managerin tai Symfony Secretsin käyttöä pinostasi riippuen. - Kierrätä salaisuutta säännöllisesti (key rotation), erityisesti vaaratilanteen jälkeen tai jos joku, jolla on ollut pääsy asetuksiin, lähtee.
- JWT Builder on tarkoitettu testaamiseen ja oppimiseen. Käytä tuotannossa sovelluskehyksesi JWT-kirjastoa (lcobucci/jwt, firebase/php-jwt, jose-php).
Väitteiden (claims) parhaat käytännöt
Payload on vapaa JSON-objekti, mutta RFC 7519 määrittelee joukon registered claims, joita JWT-kirjastot osaavat tulkita. Oikeiden väitteiden sisällyttäminen tekee tunnuksestasi siirrettävän ja välttää hienovaraisia bugeja :
- iss (issuer) : myöntäjän tunniste, esimerkiksi
"https://api.example.com". - sub (subject) : kyseessä olevan henkilön tai tahon tunniste, usein käyttäjän ID.
- aud (audience) : kenelle tunnus on tarkoitettu, estämään tunnuksen uudelleenkäyttö toisessa APIssa.
- exp (expiration time) : Unix-aikaleima, jonka jälkeen tunnus ei ole enää voimassa. Sisällytä aina, jopa testitunnukseen : ilman vanhentumisaikaa oleva tunnus on huono tapa, jota on vaikea korjata myöhemmin.
- nbf (not before) : aikaleima, jota ennen tunnus ei ole vielä voimassa. Hyödyllinen tunnuksen ennakkoon myöntämiseen, joka on aktivoitavissa myöhemmin.
- iat (issued at) : myöntämisajankohta, hyödyllinen lokitukseen ja peruuttamiseen.
- jti (JWT ID) : tunnuksen yksilöllinen tunniste, välttämätön idempotenssin ja peruutusluettelon toteuttamiseksi.
Esimerkki tyypillisestä hyötykuormasta
{
"iss": "https://api.example.com",
"sub": "user-12345",
"aud": "mobile-app",
"iat": 1714723200,
"exp": 1714726800,
"jti": "9f2d6b1e-2c4a-4f8a-9c3a-87a2b8a4b7e1",
"scope": "read:profile write:profile"
}
Työkalun käyttöohjeet
- Syötä hyötykuorma (payload) kelvollisena JSON-muotona. Se on objekti, joten se alkaa merkillä
{ja päättyy merkkiin}. - Anna HMAC-salaisuus. Valitse tuotantotokeneille pitkä ja satunnainen merkkijono.
- Valitse algoritmi: oletuksena HS256, tai tarpeesi mukaan HS384 tai HS512.
- Napsauta luo. Allekirjoitettu JWT ilmestyy, valmiina liitettäväksi
Authorization: Bearer ...-otsikkoon. - Voit sen jälkeen vahvistaa tokenin samalla salaisuudella varmistaaksesi round-tripin eheyden, tai dekoodata sen lukeaksesi sen sisällön uudelleen.
Usein kysytyt kysymykset
Mikä algoritmi valita: HS256, HS384 vai HS512?
Lähes kaikissa tapauksissa HS256 on oikea valinta. Se tarjoaa täysin riittävän tietoturvatason todennustokeneille, siinä on kompakti allekirjoitus (32 tavua) ja nopea laskenta. HS384 ja HS512 ovat perusteltuja vain tietyissä säädöksellisissä yhteyksissä tai jos hallinnoit erittäin pitkäikäisiä tokeneita. Suurempi allekirjoituskoko hidastaa jokaista HTTP-pyyntöä.
Miten generoida RSA-avainpari JWT-allekirjoitusta varten?
OpenSSL:llä kahdella komennolla: openssl genrsa -out private.pem 2048 yksityiselle
avaimelle ja openssl rsa -in private.pem -pubout -out public.pem julkisen avaimen
uuttamiseksi. Uusille palveluille suositellaan nykyään 3072- tai 4096-bittisiä
avaimia. Yksityinen avain pysyy lähettäjän puolella; julkinen avain jaetaan vapaasti
palveluille, joiden on tarkistettava tokenit.
Mikä on suositeltu vanhenemisaika?
Pääsytokenille (access token): 5–15 minuuttia. Päivitystokenille (refresh
token): muutama päivä tai muutama viikko, mutta palvelinpuolen peruutusmekanismilla. Mitä
pitkäikäisempi token on, sitä suurempi on väärinkäytön ikkuna vuodon sattuessa. Testi-JWT-tokeneille
voit käyttää pidempää kestoa, mutta vältä usean vuoden exp-arvoja: ne päätyvät
usein Git-repoihin.
Voinko allekirjoittaa erittäin lyhyellä salaisella avaimella?
Teknisesti kyllä, mutta se on erittäin epäsuositeltavaa. Alle 16 tavun
HMAC-salaisuus vastustaa heikosti offline-brute-force-hyökkäyksiä, ja on olemassa työkaluja,
jotka murtavat heikon salaisuuden sisältävän HS256 JWT:n sekunneissa. RFC 7518 suosittelee
vähintään algoritmin tulosteen kokoa: 32 tavua HS256:lle, 48 tavua HS384:lle ja 64 tavua
HS512:lle. Generoi salaisuutesi komennolla openssl rand -base64 64.
Miksi hyötykuormani hylätään?
Hyötykuorman on oltava kelvollinen JSON-objekti. Yleisiä virheitä: yksinkertaiset
lainausmerkit kaksoislainausten sijaan, ylimääräinen pilkku ennen merkkiä },
merkkijono ilman lainausmerkkejä. Tarkista JSON-muoto ensin
JSON-muotoilijallamme.
Voiko joku muu purkaa luodun JWT:n?
Allekirjoitettu JWT ei ole salattu: hyötykuorma on vain Base64URL-koodattu. Kuka tahansa voi lukea sen. Jos hyötykuorma sisältää arkaluonteisia tietoja, käytä JWE-muotoa (JSON Web Encryption), joka lisää salauksen. Työkalumme tuottaa JWS-tokenin (vain allekirjoitettu).
Pyyntöesimerkki
curl -X POST https://cdrn.fr/api/v1/tools/jwt-builder/execute \
-H "Content-Type: application/json" \
-d '{"payload":"...","secret":"...","algorithm":"HS256"}'
Syöteskeema
| Kenttä | Tyyppi | Pakollinen | Oletus |
|---|---|---|---|
payload |
text | ✓ | – |
secret |
text | ✓ | – |
algorithm |
choice (HS256, HS384, HS512) | ✓ | HS256 |
Päätepisteet
GET https://cdrn.fr/api/v1/tools- listaa kaikki saatavilla olevat työkalutGET https://cdrn.fr/api/v1/tools/jwt-builder- hakee tämän työkalun skeemanPOST https://cdrn.fr/api/v1/tools/jwt-builder/execute- suorittaa tämän työkalun JSON-payloadilla