Strategier til tilbagekaldelse af JWT-tokens
Udforsk metoder til at tilbagekalde kompromitterede eller udloggede JWT-tokens, f.eks. blacklisting og tokens med kort levetid.
Strategier til tilbagekaldelse af JWT-tokens er en gratis Spring Security 6 og JWT-godkendelse-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Spring Security 6 og JWT-godkendelse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Security 6 og JWT-godkendelse-kurset indeholder 4 lektioner i alt.
Hvorfor tilbagekalde JWT'er?
JSON Web Tokens (JWT'er) er designet til at være tilstandsløse, hvilket betyder, at serveren ikke behøver at gemme sessionsoplysninger. Selvom det giver gode skaleringsmuligheder, skaber det en udfordring: Hvordan ugyldiggør man et token, før det udløber naturligt?
Vi har brug for tilbagekaldelse i scenarier som:
- Brugerlogoff
- Kompromittering af token (f.eks. et stjålet token)
- Ændring af brugerrolle eller deaktivering af konto
Udfordringen ved tilstandsløshed
Et centralt princip ved JWT'er er, at de efter udstedelse og signering kan valideres uden forespørgsler til en database eller ekstern tjeneste. Det betyder, at en server ikke automatisk ved, om et token logisk set er blevet ugyldiggjort.
For at tilbagekalde en JWT skal du indføre en mekanisme, der genindfører en form for tilstand, så serveren kan kontrollere, om et token stadig anses for gyldigt.
Strategi 1: Tokens med kort levetid
Det enkleste og mest grundlæggende forsvar mod kompromitterede JWT'er er at give dem kort levetid. Hvis et adgangstoken udløber hurtigt (f.eks. efter 5-15 minutter), minimeres det tidsrum, hvor en angriber kan udnytte et stjålet token.
Denne strategi kombineres ofte med opdateringstokens (som gennemgås i en anden lektion) for at give en problemfri brugeroplevelse uden hyppige nye login.
Strategi 2: Sortlistning af tokens
En almindelig strategi til øjeblikkelig tilbagekaldelse er sortlistning. En sortliste er en lagring (f.eks. en databasetabel eller en hurtig cache som Redis), der indeholder de unikke identifikatorer (JTI-claims) for tokens, som udtrykkeligt er blevet ugyldiggjort.
Når en server modtager en JWT, kontrollerer den først, om tokenets JTI findes på sortlisten. Hvis det er tilfældet, afvises tokenet, selvom det ikke er udløbet.
Implementering af en sortliste
For at få en effektiv sortliste:
- Unikt ID: Sørg for, at hver JWT har et unikt JTI-claim (JWT ID).
- Lagring: Brug en hurtig og persistent lagring (f.eks. Redis eller en databasetabel) til at gemme sortlistede JTI'er.
- Kontrol: Hver gang en JWT præsenteres, skal dens signatur valideres, hvorefter det kontrolleres, om dens JTI findes på sortlisten.
- Udløb: Sortlistede tokens skal stadig overholde deres udløbstid. Selve sortlisteposten kan også have en TTL (Time To Live), der svarer til tokenets oprindelige udløbstid, så listen ikke vokser uden begrænsning.
Simulering af en sortliste
Lad os se på et enkelt Java-eksempel for at forstå konceptet sortlistning. Vi simulerer et tokens unikke ID og en sortliste i hukommelsen. I en rigtig applikation ville sortlisten være en persistent, distribueret lagring som Redis.
Sortlisten i praksis
Denne kode viser, hvordan et token-ID kan føjes til en konceptuel sortliste og derefter kontrolleres med henblik på tilbagekaldelse. Kør den for at se outputtet.
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class Main {
private static Set<String> revokedTokens = new HashSet<>();
public static void main(String[] args) {
String userTokenId = UUID.randomUUID().toString();
System.out.println("User token ID: " + userTokenId);
// Simulate token validation
if (!isTokenRevoked(userTokenId)) {
System.out.println("Token is valid (not revoked).");
} else {
System.out.println("Token is revoked!");
}
// User logs out or token is compromised
revokeToken(userTokenId);
System.out.println("\n--- Token has been revoked ---");
// Try to validate again
if (!isTokenRevoked(userTokenId)) {
System.out.println("Token is valid (not revoked).");
} else {
System.out.println("Token is revoked!");
}
}
public static void revokeToken(String tokenId) {
revokedTokens.add(tokenId);
}
public static boolean isTokenRevoked(String tokenId) {
return revokedTokens.contains(tokenId);
}
}Strategi 3: Hvidlistning
Et alternativ, som dog er mindre almindeligt for rå JWT'er, er hvidlistning. I stedet for at angive ugyldige tokens vedligeholder du en liste over alle aktuelt gyldige tokens eller sessions-ID'er.
Når en forespørgsel kommer ind, kontrollerer du, om tokenet eller sessions-ID'et findes på denne "tilladelsesliste". Hvis det ikke findes, betragtes det som ugyldigt. Denne tilgang er mere typisk til traditionel sessionhåndtering, men kan tilpasses.
- Hver aktiv session får et unikt ID.
- Gem disse gyldige ID'er i en database eller cache.
- Fjern ID'et fra hvidlisten ved logoff.
Sammenligning af strategier
Hver strategi har sit anvendelsesområde:
- Tokens med kort levetid: Afgørende for at minimere risikoen. Kombiner dem altid med andre strategier.
- Sortlistning: Bedst til specifik, øjeblikkelig ugyldiggørelse (f.eks. logoff eller kompromittering). Medfører en tilstandskontrol for hver forespørgsel.
- Hvidlistning: Nyttig, når du skal håndtere et afgrænset antal aktive sessioner og ugyldiggøre mange på én gang (f.eks. når en bruger deaktiveres, eller alle sessioner skal tilbagekaldes). Kræver tilstand for alle tokens, hvilket kan påvirke ydeevnen for API'er med meget høj trafik.
Kontrol af strategier til tilbagekaldelse
Hvilke af følgende er gyldige strategier eller vigtige overvejelser ved tilbagekaldelse af JSON Web Tokens (JWT'er), før de udløber naturligt?
Opsummering af lektionen
I denne lektion undersøgte vi, hvordan man håndterer udfordringen ved at tilbagekalde stateless JWT'er. Vi lærte, at selvom JWT'er er stateless af design, gør situationer som brugerlogout eller kompromittering af et token ugyldiggørelse nødvendig.
De vigtigste strategier omfatter:
- Brug af kortlivede tokens for at minimere risikoen.
- Implementering af en blacklist til at markere bestemte tokens som ugyldige ved hjælp af deres JTI.
- Overvejelse af whitelisting til håndtering af aktive sessioner, selvom det er mindre almindeligt for rå JWT'er.
De mest robuste løsninger kombinerer ofte korte udløbstider med en blacklist-mekanisme, når tokens skal tilbagekaldes med det samme.
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Strategier til tilbagekaldelse af JWT-tokens” gratis?
Ja — alle 3 lektioner i læringssporet Spring Security 6 og JWT-godkendelse, inklusive “Strategier til tilbagekaldelse af JWT-tokens”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Spring Security 6 og JWT-godkendelse-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Strategier til tilbagekaldelse af JWT-tokens”?
Udforsk metoder til at tilbagekalde kompromitterede eller udloggede JWT-tokens, f.eks. blacklisting og tokens med kort levetid. Du øver dig i Spring Security 6 og JWT-godkendelse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Spring Security 6 og JWT-godkendelse?
Der kræves ingen tidligere erfaring. Spring Security 6 og JWT-godkendelse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Strategier til tilbagekaldelse af JWT-tokens”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Spring Security 6 og JWT-godkendelse-lektion?
Ja. Alle Spring Security 6 og JWT-godkendelse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Implementering af refresh tokens
- Strategier til tilbagekaldelse af JWT-tokens
- Praksis for sikker tokenlagring
- Rotation af signeringsnøgler og nøglehåndtering