Säkerhet baserad på JWT
Implementera tokenbaserad autentisering med JSON Web Tokens (JWT) för tillståndslösa API:er.
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
issför utfärdare,expför utgångstid ochsubfö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:
- Genererar en JWT.
- Skickar tillbaka JWT:n till klienten.
Vid efterföljande begäranden gör klienten följande:
- Lagrar JWT:n (till exempel i lokal lagring).
- Bifogar JWT:n i
Authorization-headern (till exempelBearer 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.
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
- Grunderna i Spring Security
- Autentisering och auktorisering
- Säkerhet baserad på JWT
- Integration av OAuth2 och social inloggning