Spring Boot 4 – komplett guide · Lektion

Säkerhet baserad på JWT

Implementera tokenbaserad autentisering med JSON Web Tokens (JWT) för tillståndslösa API:er.

Lektion 3 av 411 steg

Säkerhet baserad på JWT är en gratis lektion i Spring Boot 4 – komplett guide på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Spring Boot 4 – komplett guide, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Boot 4 – komplett guide innehåller totalt 4 lektioner.

Introduktion till JWT-baserad säkerhet

Välkommen till den sista lektionen om Spring Security! I dag utforskar vi JSON Web Tokens (JWT), en populär metod för att skydda tillståndslösa API:er.

Till skillnad från traditionell sessionsbaserad autentisering gör JWT:er det möjligt för servern att förbli tillståndslös, vilket gör dem idealiska för mikrotjänster och mobilapplikationer.

Vad är en JWT?

En JWT är ett kompakt och URL-säkert sätt att representera anspråk som ska överföras mellan två parter. Anspråken i en JWT kodas som ett JSON-objekt.

  • Kompakt: Liten storlek och kan skickas via en URL, som en POST-parameter eller i en HTTP-header.
  • Självständig: Innehåller all nödvändig information om användaren, vilket gör att databasfrågor inte behövs för varje begäran.

En JWT:s uppbyggnad

En JWT består av tre delar, separerade med punkter (.):

  • Header
  • Payload
  • Signature

Den ser vanligtvis ut så här: xxxxx.yyyyy.zzzzz

Header: algoritm och typ

Header består vanligtvis av två delar: typen av token (som är JWT) och den signeringsalgoritm som används (till exempel HS256 eller RS256).

Denna JSON kodas sedan med Base64Url för att bilda JWT:ns första del.

{"alg":"HS256","typ":"JWT"}

Payload: anspråk

Payload innehåller 'anspråk' – påståenden om en entitet (vanligtvis användaren) samt ytterligare data. Det finns tre typer av anspråk:

  • Registrerade anspråk: Standardiserade anspråk som inte är obligatoriska (till exempel iss för utfärdare, exp för utgångstid och sub för subjekt).
  • Offentliga anspråk: Definieras av användare och kräver namn som motstår krockar.
  • Privata anspråk: Anpassade anspråk som avsändaren och mottagaren har kommit överens om.

Signature: tillit och integritet

Signature skapas genom att den kodade headern, den kodade payloaden, en hemlig nyckel och algoritmen som anges i headern kombineras. Den säkerställer att token inte har manipulerats.

Om någon ändrar headern eller payloaden misslyckas signaturverifieringen, vilket gör token ogiltig. Den hemliga nyckeln måste hållas konfidentiell!

Generera JWT-delar (kod)

Nu ska vi se hur headern och payloaden kodas med Base64Url. Därefter beräknas signaturen med hjälp av dessa kodade delar och en hemlighet.

import java.util.Base64;

public class JwtPartsDemo {
  public static void main(String[] args) {
    String headerJson = "{\"alg\":\"HS256\",\"typ\":\"JWT\"}";
    String payloadJson = "{\"sub\":\"coddyUser\",\"iat\":1678886400,\"exp\":1678890000}";
    
    String encodedHeader = Base64.getUrlEncoder().withoutPadding().encodeToString(headerJson.getBytes());
    String encodedPayload = Base64.getUrlEncoder().withoutPadding().encodeToString(payloadJson.getBytes());
    
    System.out.println("Encoded Header: " + encodedHeader);
    System.out.println("Encoded Payload: " + encodedPayload);
    System.out.println("\nJWT format: EncodedHeader.EncodedPayload.Signature");
  }
}

JWT-flödet i Spring Security

När en användare har autentiserats (till exempel genom att logga in med användarnamn och lösenord) gör servern följande:

  1. Genererar en JWT.
  2. Skickar tillbaka JWT:n till klienten.

Vid efterföljande begäranden gör klienten följande:

  1. Lagrar JWT:n (till exempel i lokal lagring).
  2. Bifogar JWT:n i Authorization-headern (till exempel Bearer YOUR_TOKEN).

Servern fångar sedan upp och validerar denna token för varje skyddad begäran.

Validera JWT:er (kodkoncept)

Ett anpassat filter i Spring Security skulle extrahera token, avkoda dess delar och därefter noggrant verifiera signaturen samt validera anspråk som utgångstid.

import java.util.Base64;

public class JwtValidationDemo {
  public static void main(String[] args) {
    // A simplified example token (signature part is placeholder)
    String jwtToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjb2RkeVVzZXIiLCJpYXQiOjE2Nzg4ODY0MDAsImV4cCI6MTY3ODg5MDAwMH0.SIGNATURE_PLACEHOLDER";
    
    String[] parts = jwtToken.split("\\.");
    
    if (parts.length == 3) {
      String decodedHeader = new String(Base64.getUrlDecoder().decode(parts[0]));
      String decodedPayload = new String(Base64.getUrlDecoder().decode(parts[1]));
      
      System.out.println("Decoded Header: " + decodedHeader);
      System.out.println("Decoded Payload: " + decodedPayload);
      
      // In a real application, you would:
      // 1. Verify the 'SIGNATURE_PLACEHOLDER' using the secret key.
      // 2. Parse 'decodedPayload' JSON to check claims like 'exp' (expiration).
      if (decodedPayload.contains("\"sub\":\"coddyUser\"")) {
        System.out.println("Payload contains expected subject 'coddyUser'.");
      }
    } else {
      System.out.println("Invalid JWT format.");
    }
  }
}

Snabbtest: JWT-delar

Utifrån det vi har lärt oss, vilka av följande är standarddelar i en JSON Web Token (JWT) som överförs?

Sammanfattning: JWT-baserad säkerhet

I den här lektionen utforskade vi JWT-baserad säkerhet och lärde oss om dess tre centrala delar: Header, Payload och Signature.

Vi lärde oss hur JWT:er möjliggör tillståndslös autentisering, vilket gör dem mycket skalbara och lämpliga för moderna API:er och mobilapplikationer. Du fick också se konceptuella kodexempel för att generera och validera JWT:er.

Detta avslutar vår kurs i Spring Security! Du har lärt dig att skydda applikationer, från grundläggande autentisering till avancerade tokenbaserade system.

Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
21
Lektioner
84

Vanliga frågor

Är lektionen ”Säkerhet baserad på JWT” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Spring Boot 4 – komplett guide, inklusive ”Säkerhet baserad på JWT”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Spring Boot 4 – komplett guide innehåller totalt 4 lektioner.

Vad lär jag mig i ”Säkerhet baserad på JWT”?

Implementera tokenbaserad autentisering med JSON Web Tokens (JWT) för tillståndslösa API:er. Ni övar på Spring Boot 4 – komplett guide med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Spring Boot 4 – komplett guide?

Du behöver inga förkunskaper. Utbildningen i Spring Boot 4 – komplett guide på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Säkerhet baserad på JWT”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Spring Boot 4 – komplett guide-lektionen?

Ja. Varje Spring Boot 4 – komplett guide-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i Spring Security
  2. Autentisering och auktorisering
  3. Säkerhet baserad på JWT
  4. Integration av OAuth2 och social inloggning
← Tillbaka till Spring Boot 4 – komplett guide