Bygg en signerad JSON Web Token (JWT)
- Panel
- Dokumentation
- API
Vad är JWT Builder?
JWT Builder är ett onlineverktyg som producerar en signerad JSON Web Token (JWT) från en JSON-payload och en HMAC-hemlighet. Det riktar sig till utvecklare som behöver snabbt generera en testtoken för att verifiera ett API:s beteende, simulera en autentiserad session i Postman eller reproducera en bugg relaterad till en tokens utgång eller scope.
Till skillnad från vår JWT-avkodare, som nöjer sig med att läsa en befintlig
token, tillverkar JWT Builder en fullständig token: den bygger headern, kodar
payloaden, beräknar HMAC-signaturen och sätter ihop alltsammans i det kompakta format header.payload.signature
som alla JWT-bibliotek på marknaden förväntar sig.
Varför generera en JWT?
En JWT-byggare är inte avsedd att utfärda produktionstokens. Det är framför allt ett verktyg för utveckling och tester. Här är de vanligaste scenarierna:
- Integrationstester: producera förutsägbara JWT:er för att driva E2E-tester som angriper skyddade endpoints utan att vara beroende av den riktiga identitetsleverantören.
- API-mockar: tillfälligt ersätta ett anrop till IdP:n med en JWT signerad lokalt med samma testhemlighet.
- Lokal utveckling: ansluta till sin egen backend genom att manuellt generera en token som innehåller önskade claims, utan att behöva gå igenom hela OAuth2-flödet.
- Demos: illustrera ett autentiseringsförlopp eller ett behörighetsbaserat workflow utan att ha en riktig IdP till hands.
- Buggreproduktion: smida en utgången token, en token med felaktigt
aud, en token utan vissa claims, för att testa ditt API:s felvägar. - Debug av en custom-parser: injicera specialbyggda JWT:er för att testa en egenutvecklad parser.
En JWT:s sammansättning
En signerad JWT består av tre segment separerade med en punkt, var och en kodad i
Base64URL (variant av Base64 utan padding och med -/_ i
stället för +//):
- Header: ett JSON-objekt som beskriver signaturalgoritmen och tokenens typ,
till exempel
{"alg":"HS256","typ":"JWT"}. JWT Builder genererar den automatiskt utifrån den algoritm du väljer. - Payload: ett godtyckligt JSON-objekt som innehåller tokenens claims (subject, behörigheter, utgångsdatum). Det är den del du tillhandahåller.
- Signatur: en HMAC-SHA beräknad på konkateneringen
base64url(header) + "." + base64url(payload)med din hemliga nyckel. Det är den som garanterar tokenens integritet.
Användningsfall i detalj
- API-mock för E2E-tester: din Cypress- eller Playwright-svit behöver anropa ett API
som kräver en
Authorization: Bearer .... I stället för att orkestrera en fullständig inloggning vid varje test, signerar man en JWT i farten med den delade hemligheten och injicerar den i headern. - SSO-demo: presentera ett federerat autentiseringsförlopp utan att vara beroende av en IdP online.
- Testfixtur: generera en deterministisk JWT från en känd payload för att tjäna som stabil fixtur i enhetstester.
- Diagnos av en egen parser: testa en hemmagjord JWT-parser med avsiktligt minimala eller avsiktligt konstiga tokens (saknade claims, oväntade typer).
- Lärande: konkret förstå hur en JWT byggs upp, genom att modifiera payloaden och observera hur signaturen ändras.
Algoritmer som stöds: HS256, HS384, HS512
Vårt verktyg stöder de tre standard-HMAC-algoritmerna från JWT-specifikationen (RFC 7519):
- HS256: HMAC med SHA-256. Signatur på 32 byte. Mest använd i praktiken, bra kompromiss mellan snabbhet och kryptografisk soliditet. Rekommenderad som standard.
- HS384: HMAC med SHA-384. Signatur på 48 byte. Anpassad för sammanhang som kräver en högre säkerhetsmarginal.
- HS512: HMAC med SHA-512. Signatur på 64 byte. Den mest robusta, till priset av en något större token.
HMAC eller RSA?
HS*-algoritmerna är symmetriska: samma nyckel används för att signera och verifiera. Det är enkelt och snabbt, men betyder att varje tjänst som kan verifiera en token också kan utfärda den. Om du behöver separera dessa två roller (en enda utfärdare, flera konsumenter), gå mot RS256/RS384/RS512-algoritmerna (RSA, asymmetriska), som du kan verifiera med vår JWT-verifier.
Säkerhet: skydda din hemlighet
Säkerheten i en HMAC-signerad JWT bygger helt på hemlighetens konfidentialitet. Några grundregler:
- Använd en lång och slumpmässig hemlighet. RFC 7518 rekommenderar minst storleken
på algoritmens utdata (32 byte för HS256, 48 för HS384, 64 för HS512). Ett mänskligt
lösenord som
azerty123är trivialt att knäcka offline. - Signera aldrig en JWT på klientsidan. Hemligheten skulle hamna i den JavaScript-kod som distribueras till webbläsaren, exponerad för alla användare. Signaturen ska alltid stanna på serversidan.
- Lagra hemligheten i en miljövariabel (t.ex.
JWT_SECRET), aldrig i ett Git-repo. Tänk på att använda ett valv som HashiCorp Vault, AWS Secrets Manager eller Symfony Secrets beroende på din stack. - Rotera hemligheten regelbundet (key rotation), särskilt efter incident eller om någon med tillgång till konfigurationen slutar.
- JWT Builder är avsedd för tester och lärande. För produktion, använd JWT-biblioteket i ditt ramverk (lcobucci/jwt, firebase/php-jwt, jose-php).
Bästa praxis för claims
Payloaden är ett fritt JSON-objekt, men RFC 7519 definierar en uppsättning registered claims som JWT-bibliotek kan tolka. Att inkludera rätt claims gör din token portabel och undviker subtila buggar:
- iss (issuer): utfärdarens identifierare, till exempel
"https://api.example.com". - sub (subject): identifierare för den person eller entitet som berörs, ofta användarens ID.
- aud (audience): vem tokenen är avsedd för, för att förhindra återanvändning av en token på ett annat API.
- exp (expiration time): Unix-timestamp efter vilken tokenen inte längre är giltig. Inkludera alltid, även för en testtoken: en token utan utgång är en dålig vana som är svår att rätta till senare.
- nbf (not before): timestamp före vilken tokenen ännu inte är giltig. Användbar för att förhandsutfärda en token som aktiveras senare.
- iat (issued at): utfärdande-timestamp, användbar för loggning och revokering.
- jti (JWT ID): tokenens unika identifierare, oumbärlig för idempotens och för att implementera en revokeringslista.
Exempel på typisk payload
{
"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"
}
Så använder du verktyget
- Ange payloaden som giltig JSON. Det är ett objekt, så det börjar med
{och slutar med}. - Ange HMAC-hemligheten. Välj en lång och slumpmässig sträng för produktionstokens.
- Välj algoritm: HS256 som standard, HS384 eller HS512 efter dina behov.
- Klicka på skapa. Den signerade JWT:n visas, redo att klistras in i en header
Authorization: Bearer .... - Du kan sedan verifiera tokenen med samma hemlighet för att bekräfta round-trip-konsistensen, eller avkoda den för att läsa om dess innehåll.
Vanliga frågor
Vilken algoritm ska man välja: HS256, HS384, HS512?
För nästan alla fall är HS256 det rätta valet. Den erbjuder en perfekt tillräcklig säkerhetsnivå för autentiseringstokens, med kompakt signatur (32 byte) och snabb beräkning. HS384 och HS512 motiveras endast i specifika regulatoriska sammanhang eller om du hanterar mycket långlivade tokens. Den större signaturstorleken tynger varje HTTP-förfrågan.
Hur genererar man ett RSA-nyckelpar för att signera mina JWT:er?
Med OpenSSL i två kommandon: openssl genrsa -out private.pem 2048 för den privata
nyckeln, sedan openssl rsa -in private.pem -pubout -out public.pem för att extrahera
den publika nyckeln. För nya tjänster rekommenderas idag nycklar på
3072 bitar eller 4096 bitar. Den privata nyckeln stannar hos utfärdaren; den publika nyckeln
distribueras fritt till de tjänster som ska verifiera tokens.
Vilken utgångstid rekommenderas?
För en access token: 5 till 15 minuter. För en refresh token: några dagar till
några veckor, men med en revokeringsmekanism på serversidan. Ju mer
långlivad tokenen är, desto större fönster för utnyttjande vid läcka. För test-JWT:er kan du
ta en mer generös tid, men undvik exp på flera år:
de slutar med att läcka i Git-repon.
Kan jag signera med en mycket kort hemlig nyckel?
Tekniskt sett ja, men det avråds starkt. En HMAC-hemlighet under
16 byte är svagt motståndskraftig mot offline-brute-force-attacker, och det finns
verktyg som knäcker en HS256-JWT med svag hemlighet på några sekunder. RFC 7518
rekommenderar minst storleken på algoritmens utdata: 32 byte för HS256,
48 för HS384, 64 för HS512. Generera dina hemligheter med
openssl rand -base64 64.
Varför avvisas min payload?
Payloaden ska vara ett giltigt JSON-objekt. Vanliga fel: enkla citattecken i stället för
dubbla, för många kommatecken före }, värde utan citattecken för en sträng. Validera
först din JSON med vår JSON-formaterare.
Kan den genererade JWT:n dekrypteras av någon annan?
En signerad JWT är inte krypterad: payloaden är bara kodad i Base64URL. Vem som helst kan läsa den. Om payloaden innehåller känsliga data, använd JWE-formatet (JSON Web Encryption) som lägger till kryptering. Vårt verktyg producerar en JWS (signed only).
Exempelförfrågan
curl -X POST https://cdrn.fr/api/v1/tools/jwt-builder/execute \
-H "Content-Type: application/json" \
-d '{"payload":"...","secret":"...","algorithm":"HS256"}'
Indatasschema
| Fält | Typ | Obligatorisk | Standard |
|---|---|---|---|
payload |
text | ✓ | – |
secret |
text | ✓ | – |
algorithm |
choice (HS256, HS384, HS512) | ✓ | HS256 |
Slutpunkter
GET https://cdrn.fr/api/v1/tools- listar alla tillgängliga verktygGET https://cdrn.fr/api/v1/tools/jwt-builder- hämtar schemat för detta verktygPOST https://cdrn.fr/api/v1/tools/jwt-builder/execute- kör detta verktyg med en JSON-payload