Vytvoriť podpísaný JSON Web Token (JWT)
- Dashboard
- Dokumentácia
- API
Čo je JWT Builder?
JWT Builder je online nástroj, ktorý produkuje podpísaný JSON Web Token (JWT) z JSON payloadu a HMAC secretu. Adresovaný je vývojárom, ktorí potrebujú rýchlo generovať test token na overenie správania API, simulovať autentifikovanú session v Postman, alebo reprodukovať bug súvisiaci s expiráciou alebo scope tokena.
Na rozdiel od nášho JWT decoderu, ktorý sa uspokojí s čítaním
existujúceho tokena, JWT Builder vyrába kompletný token: skladá header, kóduje
payload, počíta HMAC podpis a skladá všetko vo formáte header.payload.signature
očakávanom všetkými JWT knižnicami na trhu.
Prečo generovať JWT?
JWT builder nemá vokáciu vydávať produkčné tokeny. Je to predovšetkým nástroj vývoja a testov. Tu sú najbežnejšie scenáre:
- Integračné testy: produkovať predvídateľné JWT pre riadenie E2E testov, ktoré klepú na chránené endpointy bez závislosti na skutočnom identity provideri.
- API mocky: dočasne nahradiť volanie IdP lokálne podpísaným JWT s rovnakým testovacím secretom.
- Lokálny vývoj: pripojiť sa k vášmu backendu manuálnym generovaním tokena obsahujúceho požadované claims, bez nutnosti prechádzať celým OAuth2 flow.
- Dema: ilustrovať autentifikačný priebeh alebo workflow založený na permisiách bez skutočného IdP poruke.
- Reprodukcia bugov: vyfalešovať expirovaný token, token s
nesprávnym
aud, token bez určitých claims, na testovanie chybových ciest vášho API. - Debugovanie custom parsera: injektovať špeciálne konštruované JWT pre testovanie vlastného parsera.
Zloženie JWT
Podpísaný JWT je zložený z troch segmentov oddelených bodkou, každý kódovaný v
Base64URL (variant Base64 bez paddingu a s -/_
namiesto +//):
- Header: JSON objekt opisujúci podpisový algoritmus a typ tokena,
napríklad
{"alg":"HS256","typ":"JWT"}. JWT Builder ho automaticky generuje z algoritmu, ktorý zvolíte. - Payload: ľubovoľný JSON objekt obsahujúci claims tokena (subjekt, permisie, expiračné dátumy). Je to časť, ktorú poskytujete.
- Signature: HMAC-SHA počítaný na konkatenácii
base64url(header) + "." + base64url(payload)s vaším tajným kľúčom. Je to ona, čo garantuje integritu tokena.
Detailné prípady použitia
- API mock pre E2E testy: vaša Cypress alebo Playwright sada musí volať API,
ktoré vyžaduje
Authorization: Bearer .... Namiesto orchestrácie kompletného loginu pri každom teste podpisujeme JWT za behu so zdieľaným secretom a injektujeme ho do hlavičky. - SSO demo: prezentovať federovaný autentifikačný priebeh bez závislosti na online IdP.
- Test fixture: generovať deterministický JWT zo známeho payloadu pre slúženie ako stabilná fixture v unit testoch.
- Diagnostika custom parsera: testovať vlastný JWT parser s tokenmi zámerne minimálnymi alebo zámerne podivnými (chýbajúce claims, neočakávané typy).
- Učenie: konkrétne pochopiť, ako sa JWT konštruuje, modifikáciou payloadu a sledovaním zmeny podpisu.
Podporované algoritmy: HS256, HS384, HS512
Náš nástroj podporuje tri štandardné HMAC algoritmy JWT špecifikácie (RFC 7519):
- HS256: HMAC so SHA-256. Podpis 32 bajtov. Najpoužívanejší v praxi, dobrý kompromis medzi rýchlosťou a kryptografickou solídnosťou. Defaultne odporúčaný.
- HS384: HMAC so SHA-384. Podpis 48 bajtov. Vhodný pre kontexty vyžadujúce vyššiu bezpečnostnú maržu.
- HS512: HMAC so SHA-512. Podpis 64 bajtov. Najrobustnejší, za cenu mierne objemnejšieho tokena.
HMAC alebo RSA?
Algoritmy HS* sú symetrické: rovnaký kľúč slúži na podpisovanie aj overovanie. Je to jednoduché a rýchle, ale to znamená, že každý servis schopný overiť token je tiež schopný ho vydávať. Ak potrebujete oddeliť tieto dve role (jeden vydavateľ, viacero konzumentov), obráťte sa na RS256/RS384/RS512 algoritmy (RSA, asymetrické), ktoré môžete overiť naším JWT verifierom.
Bezpečnosť: chráňte váš secret
Bezpečnosť JWT podpísaného v HMAC spočíva kompletne na dôvernosti secretu. Niekoľko základných pravidiel:
- Použite dlhý a náhodný secret. RFC 7518 odporúča minimálne veľkosť
výstupu algoritmu (32 bajtov pre HS256, 48 pre HS384, 64 pre HS512). Ľudské heslo
ako
azerty123je triviálne napadnuteľné offline hrubou silou. - Nikdy nepodpisujte JWT na strane klienta. Secret by skončil v JavaScript kóde distribuovanom do prehliadača, exponovanom každému užívateľovi. Podpis musí vždy zostať na strane servera.
- Uložte secret v environment premennej (napr.
JWT_SECRET), nikdy v Git repozitári. Myslite na použitie trezora ako HashiCorp Vault, AWS Secrets Manager alebo Symfony Secrets podľa vášho stacku. - Pravidelne rotujte secret (key rotation), najmä po každom incidente alebo odchode osoby, ktorá mala prístup ku konfigurácii.
- JWT Builder je určený na testy a učenie. Pre produkciu použite JWT knižnicu vášho frameworku (lcobucci/jwt, firebase/php-jwt, jose-php).
Dobré praktiky claims
Payload je voľný JSON objekt, ale RFC 7519 definuje sadu registered claims, ktoré JWT knižnice vedia interpretovať. Zahrnutie správnych claims robí váš token portabilným a vyhýba sa jemným bugom:
- iss (issuer): identifikátor vydavateľa, napríklad
"https://api.example.com". - sub (subject): identifikátor osoby alebo entity dotknutej, často ID užívateľa.
- aud (audience): pre koho je token určený, na zabránenie znovupoužitia tokena na inom API.
- exp (expiration time): Unix timestamp, po ktorom token už nie je validný. Vždy zahrnúť, aj pre test token: token bez expirácie je zlý zvyk, ťažko opraviteľný neskôr.
- nbf (not before): timestamp, pred ktorým ešte token nie je validný. Užitočné pre predvydanie tokena aktivovateľného neskôr.
- iat (issued at): timestamp vydania, užitočný pre logovanie a revokáciu.
- jti (JWT ID): unikátny identifikátor tokena, nepostrádateľný pre idempotenciu a implementáciu revokačného zoznamu.
Príklad typického payloadu
{
"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"
}
Ako používať nástroj
- Zadajte payload vo forme validného JSON. Je to objekt, takže začína
{a končí}. - Indikujte HMAC secret. Vyberte dlhý a náhodný reťazec pre produkčné tokeny.
- Vyberte algoritmus: HS256 defaultne, HS384 alebo HS512 podľa vašich potrieb.
- Kliknite na vytvoriť. Podpísaný JWT sa objaví, pripravený na vloženie do
Authorization: Bearer ...hlavičky. - Token môžete potom overiť s rovnakým secretom pre potvrdenie koherencie round-tripu, alebo ho dekódovať pre prečítanie jeho obsahu.
Často kladené otázky
Aký algoritmus zvoliť: HS256, HS384, HS512?
Pre takmer všetky prípady je HS256 správna voľba. Ponúka úroveň bezpečnosti perfektne postačujúcu pre autentifikačné tokeny, s kompaktným podpisom (32 bajtov) a rýchlym výpočtom. HS384 a HS512 sa ospravedlňujú iba v presných regulatorných kontextoch alebo ak spravujete tokeny s veľmi dlhou životnosťou. Vyššia veľkosť podpisu zaťažuje každú HTTP požiadavku.
Ako generovať RSA pár na podpisovanie mojich JWT?
S OpenSSL v dvoch príkazoch: openssl genrsa -out private.pem 2048 pre
privátny kľúč, potom openssl rsa -in private.pem -pubout -out public.pem pre extrakciu
verejného kľúča. Pre nové služby sa dnes odporúčajú kľúče
3072 bitov alebo 4096 bitov. Privátny kľúč zostáva na strane vydavateľa; verejný kľúč sa
voľne distribuuje servisom, ktoré musia overovať tokeny.
Aká je odporúčaná doba expirácie?
Pre access token: 5 až 15 minút. Pre refresh token: niekoľko dní až
niekoľko týždňov, ale s revokačným mechanizmom na strane servera. Čím je token
dlhodobejší, tým je okno exploitácie v prípade úniku väčšie. Pre test JWT
môžete zvoliť veľkorysejšiu dobu, ale vyhýbajte sa exp na niekoľko rokov:
nakoniec uniknú v Git repozitároch.
Môžem podpisovať s veľmi krátkym tajným kľúčom?
Technicky áno, ale je to silne neodporúčané. HMAC secret kratší ako
16 bajtov je slabo odolný offline útoku hrubou silou, a v prírode nájdeme
nástroje, ktoré prelomia HS256 JWT so slabým secretom v niekoľkých sekundách.
RFC 7518 odporúča minimálne veľkosť výstupu algoritmu: 32 bajtov pre HS256,
48 pre HS384, 64 pre HS512. Generujte vaše secrety s
openssl rand -base64 64.
Prečo je môj payload odmietnutý?
Payload musí byť validný JSON objekt. Bežné chyby: jednoduché úvodzovky namiesto
dvojitých, čiarka navyše pred }, hodnota bez úvodzoviek pre reťazec. Validujte
najprv váš JSON naším JSON formátorom.
Môže byť generovaný JWT dešifrovaný niekým iným?
Podpísaný JWT nie je šifrovaný: payload je iba kódovaný v Base64URL. Každý ho môže čítať. Ak payload obsahuje citlivé dáta, použite JWE formát (JSON Web Encryption), ktorý pridáva šifrovanie. Náš nástroj produkuje JWS (iba signed).
Ukážka požiadavky
curl -X POST https://cdrn.fr/api/v1/tools/jwt-builder/execute \
-H "Content-Type: application/json" \
-d '{"payload":"...","secret":"...","algorithm":"HS256"}'
Vstupná schéma
| Pole | Typ | Povinné | Predvolené |
|---|---|---|---|
payload |
text | ✓ | – |
secret |
text | ✓ | – |
algorithm |
choice (HS256, HS384, HS512) | ✓ | HS256 |
Koncové body
GET https://cdrn.fr/api/v1/tools- vypíše všetky dostupné nástrojeGET https://cdrn.fr/api/v1/tools/jwt-builder- získa schému tohto nástrojaPOST https://cdrn.fr/api/v1/tools/jwt-builder/execute- spustí tento nástroj s JSON payloadom