Luo allekirjoitettu JSON Web Token (JWT)

generoi allekirjoitetun JWT:n (HS256, HS384, HS512) JSON-payloadista ja HMAC-salaisuudesta, valmiina API-testeillesi tai todennustokeneillesi

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

  1. Syötä hyötykuorma (payload) kelvollisena JSON-muotona. Se on objekti, joten se alkaa merkillä { ja päättyy merkkiin }.
  2. Anna HMAC-salaisuus. Valitse tuotantotokeneille pitkä ja satunnainen merkkijono.
  3. Valitse algoritmi: oletuksena HS256, tai tarpeesi mukaan HS384 tai HS512.
  4. Napsauta luo. Allekirjoitettu JWT ilmestyy, valmiina liitettäväksi Authorization: Bearer ... -otsikkoon.
  5. 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ökalut
  • GET https://cdrn.fr/api/v1/tools/jwt-builder - hakee tämän työkalun skeeman
  • POST https://cdrn.fr/api/v1/tools/jwt-builder/execute - suorittaa tämän työkalun JSON-payloadilla