akademin körs anonymt — inget sparas
skapa kontonummer →
Akademin / Nivå VI · Fundament / Lektion 29
lektion 29 · fundament

JWT är inte hemlig.

JSON Web Tokens är moderna sajters favorit-mekanism för inloggning. De ser kryptografiska ut. De är det inte — innehållet är läsbart för alla. Här är vad som är signerat, vad som inte är det, och de fallgropar som krossat även stora aktörer.

Välj spår Hur tekniskt vill du ha det?

En JWT är en lapp med tre delar separerade av punkter. Första delen säger hur den är signerad. Andra delen är data — vem du är, vad du får göra. Tredje delen är signaturen. Allt utom signaturen kan läsas av vem som helst.

01Anatomi: tre delar, två punkter

En typisk JWT ser ut så här:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZGEifQ.xK9k7Pq...3jLm

Tre delar, alla base64-kodade:

02JWT är inte krypterad — den är signerad

Det här är det viktigaste att förstå: vem som helst kan läsa innehållet i en JWT. Det är inte gömt. Det är bara base64-kodat, precis som vi såg i lektion 27 om Basic Auth.

Konsekvens: Lägg aldrig hemligheter i JWT-payloaden. Inga lösenord, ingen personnummer, inga API-nycklar. Allt är synligt för den som har tokenen.

Vad signaturen gör är annat: den bevisar att tokenen kommer från en server som har en specifik hemlig nyckel — så ingen kan ändra "min användare" till "någon annans användare" utan att signaturen blir ogiltig.

03Hur den används i en request

Tokenen följer med i Authorization-headern, med prefixet Bearer:

Authorization: Bearer eyJhbGc...3jLm

Servern tar emot, verifierar signaturen, och om allt stämmer behandlar requesten som inloggad. Inget databas-uppslag behövs — servern litar på sin egen signatur.

04Prova själv — dekoda en JWT

Skriv vad du vill i payloaden. Du får tillbaka en riktig JWT. Klicka dekoda för att se hur lätt innehållet plockas isär.

resulterande JWT
väntar...
dekodad header + payload (signaturen är binär)
tryck dekoda
Hemlighet: nej, allt är synligt Signatur bevisar: tokenen är inte manipulerad

05Vad det betyder för dig

JWT är ett bra verktyg när det används rätt — och en katastrof när det används fel. Som användare kan du inte styra det, men förstår du strukturen kan du också förstå när du läser i nyheter att en sajt blev hackad genom "JWT-fallgropen" — som vi tar i djupare-spåret.

Nästa lektion (30) avslutar fundamentet med TLS — det krypterade lagret under HTTP som hindrar allt vi pratat om från att läsas av folk i mitten.

JWT specificeras i RFC 7519. Formatet är BASE64URL(header) . BASE64URL(payload) . BASE64URL(signature). Signaturen genereras av en av cirka tio definierade algoritmer. Det är där säkerheten bor — och historiskt också där den brustit.

01Standard-claims i payload

RFC 7519 definierar registrerade claims med tre bokstäver, alla valfria men starkt rekommenderade:

02Signaturalgoritmer — de vanliga

03Fallgrop 1: alg:none-attacken

I tidiga JWT-bibliotek (pre-2015) kunde en angripare:

  1. Ta en giltig token
  2. Ändra header till {"alg":"none","typ":"JWT"}
  3. Ändra payload till vad de vill (typ "sub":"admin")
  4. Skicka tokenen utan signatur
  5. Servern verifierade enligt det klienten sa i header — alg "none" → inget att verifiera → access beviljas
Lärdom: Servern måste alltid veta vilken algoritm den förväntar sig. Lita aldrig på alg-fältet från klienten. Moderna bibliotek kräver explicit allow-list av algoritmer.

04Fallgrop 2: weak HMAC secret

HS256-säkerheten bygger helt på att hemligheten är okänd. Om utvecklaren använt secret, changeme, eller appens namn — kan en angripare brute-forca den offline på sekunder med hashcat -m 16500. Då kan de signera vilken token de vill.

05Fallgrop 3: revokering

JWT är stateless. Det är poängen — och problemet. Om en token läcker innan exp, kan du inte enkelt revokera den. Lösningar:

06Prova själv — signera och verifiera

Skriv en payload och en hemlighet. Du får en JWT signerad med HS256 — direkt i din browser, ingen server inblandad. Ändra sedan hemligheten och se signaturen ändras totalt.

resulterande JWT
väntar...
vad alg:none-attacken skulle ge en angripare
tryck för att se
Algoritm: HS256 Verktyg en angripare skulle använda: hashcat -m 16500

Snabb-koll — tre frågor

lektion 29 · klarad ✓ Nästa upp

Lektion 30 — TLS-handshake

Vad händer på 200 ms när du ser hänglåset i adressfältet. Certifikat, nyckelutbyte, och varför HTTPS skyddar allt vi pratat om i fundamentet.

Nästa lektion