KernelHost Tools JWT Decoder

JWT Decoder

Bryt ner en JSON Web Token i delarna header, payload och signature, inspektera claims, verifiera vid behov signaturen mot ett secret eller en publik nyckel. Allt körs lokalt i din webbläsare.

Klistra in en token i fältet, de tre boxarna uppdateras live (inmatning är debounced, runt 300 ms).

100% i din webbläsare: Detta verktyg är ren HTML+JavaScript. Din JWT, ditt secret och din publika nyckel bearbetas helt på din maskin och skickas aldrig till en server.
Header
väntar på inmatning ...
Payload
väntar på inmatning ...
Signature
väntar på inmatning ...

Verifiera signatur (valfritt)

HS256/HS384/HS512 kräver ett shared secret. RS*, PS* och ES* använder en publik nyckel i PEM-format (SPKI / BEGIN PUBLIC KEY). Ed25519 fungerar i moderna webbläsare.

Redo att verifiera
Tips: för riktig produktionsvalidering ska kontrollen ligga i auth-lagret på din server, inte i webbläsaren. Detta verktyg är till för felsökning, reverse engineering och inlärning.

Vad är en JWT?

En JSON Web Token (JWT, uttalas "jot") är ett kompakt, signerat JSON-objekt definierat i RFC 7519. Det bär claims mellan två parter, oftast mellan en auth-server och ett API. Servern utfärdar token efter lyckad autentisering, och klienten bifogar den till varje API-anrop via headern `Authorization: Bearer ...`.

JWTs består av tre base64url-kodade delar sammanfogade med punkter. De är inte krypterade, bara signerade. Den som har token kan läsa innehållet, varför lösenord och andra hemligheter aldrig får ligga i payloaden.

Fördelen jämfört med server-side sessioner: en JWT är self-contained. En API-server kan validera token och hämta rättigheter utan att kontakta auth-servern eller fråga ett session-store. Det skalar horisontellt utmärkt, men kostar möjligheten att återkalla enskilda tokens före utgång.

Header, payload, signature förklarade

Varje JWT har tre delar, sammanfogade med enskilda punkter:

  • Header: litet JSON-objekt med `alg` (algoritm, t.ex. HS256, RS256, ES256) och `typ` (vanligtvis "JWT"). Ibland även `kid` (key ID) som ledtråd om vilken nyckel som användes för signering.
  • Payload: JSON-objekt som håller claims. Standardfält är `iss` (issuer), `sub` (subject), `aud` (audience), `exp` (expiration), `nbf` (not before), `iat` (issued at) och `jti` (unikt token-ID). Egna fält tillåts vid sidan av.
  • Signature: beräknad över `base64url(header) + "." + base64url(payload)` med konfigurerad algoritm. Den skyddar integriteten: utan nyckeln kan innehållet inte ändras obemärkt.

Viktigt: base64url är kodning, inte kryptering. Header och payload är läsbara för vem som helst som tittar.

JWT vs. sessionskakor

Båda metoderna bevarar ett autentiserat tillstånd, men på olika sätt:

  • Sessionskaka: ogenomskinligt ID, servern slår upp det fullständiga tillståndet i session-store. Återkallning är omedelbar, men varje förfrågan kostar en uppslagning.
  • JWT: bär själva tillståndet, säkrad endast av signatur. Ingen uppslagning behövs, perfekt för mikrotjänstarkitekturer, men återkallning före utgång kräver allow/deny-lista.
  • Storlek: JWTs ligger ofta på 300 till 1500 byte. Session-ID:n är vanligen runt 32 byte. Vid många API-anrop summeras JWT-storleken i bandbredd.
  • Lagring: kakor (HttpOnly, Secure, SameSite) är den säkrare lagringsplatsen för webbläsare. localStorage är exponerat för XSS.

Tumregel: håll dig till sessioner för rena server-appar, använd JWTs för API-gateways och mobila backends, helst med korta livstider och refresh-token-flöde.

JWT-säkerhet: vad göra åt `algorithm: none`?

JWTs har drabbats av flera spektakulära biblioteksbuggar de senaste åren. De största fallgroparna:

  • `alg: none`: flera bibliotek brukade acceptera osignerade tokens när headern hävdade så. Lösning: tillåt aldrig `none`, hårdkoda den tillåtna algoritmen på servern.
  • HS256/RS256-förvirring: en angripare signerar en token med RSA-publika nyckeln som HMAC-secret, servern validerar den som HS256 i stället för RS256, och luras. Försvar: tillåtet `alg` är fastlagt på servern.
  • `kid` injection: fältet `kid` pekar på en nyckel, men osanerat kan det leda till path traversal eller SQL-injection. Behandla värdet som untrusted input.
  • Svaga secrets: HS256-tokens med "secret" eller "password" som nyckel faller på sekunder genom brute force. Använd minst 256 slumpmässiga bitar, helst från `crypto.getRandomValues()` eller `/dev/urandom`.
  • Lång livstid: varje utfärdad JWT är giltig till utgång, även efter att en användare har "loggat ut". Använd korta livstider (15 min) plus refresh-token-flöde, eller en deny-lista för känsliga endpoints.

OWASP-fusklappar och RFC 8725 (JWT Best Current Practices) är obligatorisk läsning.

Hur validerar jag en JWT?

En komplett validering täcker mycket mer än bara signaturen. Ordning i serverkoden:

  • Tolka headern, kontrollera `alg` mot en allowlist (t.ex. endast RS256).
  • Verifiera signaturen med nyckeln som matchar issuer-konfigurationen. Med JWKS, använd `kid` för uppslagning, men whitelista värdena först.
  • Kontrollera standardclaims: `iss` matchar förväntad issuer, `aud` innehåller din egen audience, `exp` ligger i framtiden, `nbf` och `iat` ligger i det förflutna (tillåt liten clock-skew-tolerans).
  • Validera dina egna claims (roller, tenant-ID, scopes) mot din affärsmodell.
  • Om tidig återkallning krävs, kontrollera deny / logout-listan.

Förlita dig på ett etablerat bibliotek (jose, jjwt, jsonwebtoken etc.), inte på handskriven kod. Kryptografi är inget hobbyprojekt.

Hosta din auth-backend hos KernelHost

En JWT-utfärdare och resource-server behöver en pålitlig backend med låg latens. KernelHost driver egna VPS- och dedikerade servrar i Frankfurt FRA01 med DDoS-skydd, IPv4 + IPv6 och 1 Gbit/s uplink. Låg RTT till europeiska slutanvändare, rättvisa priser, ingen vendor lock-in. Företagssäte Wien (AT), datacenter Frankfurt (DE).

JWT FAQ

Är det säkert att klistra in en produktions-JWT i detta verktyg?

Ja. Sidan är statisk HTML med JavaScript, utan server-side-logik. Innehåll lämnar aldrig webbläsaren och sparas inte heller i localStorage (endast HMAC-secret eller publik nyckel om "kom ihåg"-alternativet är aktiverat).

Vilka algoritmer stöds för signaturverifiering?

HMAC HS256, HS384, HS512 med ett secret. RSA RS256/384/512 och PS256/384/512 plus ECDSA ES256/384/512 med publik nyckel (PEM, SPKI). EdDSA / Ed25519 i moderna webbläsare.

Varför ser jag "algoritm stöds inte"?

Vissa algoritmer (t.ex. Ed25519) finns bara i nyare webbläsarversioner. Uppdatera webbläsaren, eller verifiera signaturen serverbaserat.

Kan verktyget även signera / generera tokens?

Nej, detta verktyg verifierar och avkodar bara. För att skapa tokens, använd en bit serverkod med jose, jjwt eller jsonwebtoken.

Är base64url samma sak som vanlig Base64?

Nästan. base64url byter ut `+` och `/` mot `-` och `_`, och gör padding (`=`) valfri, så att kodningen förblir URL-säker.

Vad händer om `exp` ligger i det förflutna?

Token avkodas ändå (för inspektion), men får den orange pillen "Utgången". Serverkod ska alltid avvisa utgångna tokens.

Sparas mitt secret eller publika nyckel någonstans?

Endast om du aktiverar "kom ihåg"-alternativet. Då sparas secret och publik nyckel i webbläsarens `localStorage`, aldrig på en server. Avbocka rutan så tas de bort igen.

Vilka begränsningar har verktyget?

Inga fasta. I praktiken fungerar allt under cirka 4 KiB pålitligt. Med mycket stora tokens kan webbläsaren bli märkbart långsammare under highlighting.

Alla KernelHost-produkter

Behöver du mer än bara verktyg? Kolla in vårt kommersiella hostingutbud.