Svartelisting og hvitelisting av JWT-tokens
Gå i dybden på avanserte teknikker for tilbakekalling av tokens, blant annet ved å vedlikeholde svartelister eller hvitelister over tokens.
Svartelisting og hvitelisting av JWT-tokens er en gratis leksjon i Spring Security 6 og JWT-autentisering på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Spring Security 6 og JWT-autentisering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Spring Security 6 og JWT-autentisering inneholder totalt 4 leksjoner.
Hvorfor tilbakekalle JWT-er?
JSON Web Tokens (JWT-er) er effektive for autentisering, men noen ganger må de ugyldiggjøres før de utløper naturlig. Denne prosessen kalles tilbakekalling av tokens.
- Kompromittert token: Hvis et token blir stjålet.
- Bruker logger ut: For å avslutte brukerens økt umiddelbart.
- Passordendring: For å ugyldiggjøre alle gamle tokens.
- Endringer i roller: For å tvinge frem ny autentisering med nye tillatelser.
Den tilstandsløse utfordringen
JWT-er er i utgangspunktet tilstandsløse. Når de først er utstedt, inneholder de all nødvendig informasjon for validering og krever ikke at serveren lagrer øktdata.
Denne tilstandsløsheten er en styrke, men den gjør direkte tilbakekalling på serversiden vanskelig. Serveren har vanligvis ikke en liste over aktive tokens som den enkelt kan «slå av».
Forklaring av svartelisting
Svartelisting er en vanlig strategi for å tilbakekalle JWT-er. Når et token må ugyldiggjøres, legges den unike identifikatoren (ofte JTI-claimet) til på en «svarteliste» – en liste over forbudte tokens.
- Alle tokens med en JTI på denne listen avvises, selv om de er kryptografisk gyldige og ikke har utløpt.
- Dette gjør det mulig å «angre» et tokens gyldighet.
Implementering av en svarteliste
Svartelisten må lagres i et svært tilgjengelig datalager med rask tilgang. Hastighet er avgjørende fordi hver innkommende forespørsel kan måtte sjekke denne listen.
- Redis: Et utmerket valg på grunn av lagring i minnet og støtte for «time-to-live» (TTL) på oppføringer, som kan samsvare med tokens utløpstid.
- Database: En enkel tabell kan fungere, men kan være tregere ved kontroller i stort volum.
- Hver oppføring lagrer vanligvis JWT-ens JTI og det opprinnelige utløpstidspunktet.
Enkel svartelistetjeneste
Her er et grunnleggende grensesnitt for en tjeneste som administrerer en svarteliste for tokens. I en virkelig applikasjon ville dette kommunisert med en database eller et hurtiglagersystem som Redis.
public interface TokenBlacklistService {
void blacklistToken(String jti, long expirySeconds);
boolean isBlacklisted(String jti);
}JWT-filter med svartelistesjekk
Når en forespørsel kommer inn, vil et sikkerhetsfilter først validere JWT-ens signatur og utløpstid. Deretter sjekker det om tokens JTI finnes på svartelisten før tilgang gis.
Prøv å kjøre dette eksempelet:
import java.util.HashSet;
import java.util.Set;
// A simplified in-memory blacklist for demonstration
class MockTokenBlacklistService {
private Set<String> blacklistedJtis = new HashSet<>();
public void blacklistToken(String jti, long expirySeconds) {
System.out.println("Action: Blacklisting JTI " + jti);
blacklistedJtis.add(jti);
// In a real app, 'expirySeconds' would set a TTL on the blacklist entry
}
public boolean isBlacklisted(String jti) {
boolean result = blacklistedJtis.contains(jti);
System.out.println("Check: Is JTI " + jti + " blacklisted? " + result);
return result;
}
}
public class Main {
public static void main(String[] args) {
MockTokenBlacklistService blacklist = new MockTokenBlacklistService();
String userTokenJti = "user-abc-123";
String adminTokenJti = "admin-def-456";
// Simulate an admin token being revoked after a security event
blacklist.blacklistToken(adminTokenJti, 3600); // Token expires in 1 hour
// Check access for different tokens
System.out.println("\n--- Access Checks ---");
System.out.println("User token access: " + (blacklist.isBlacklisted(userTokenJti) ? "DENIED" : "GRANTED"));
System.out.println("Admin token access: " + (blacklist.isBlacklisted(adminTokenJti) ? "DENIED" : "GRANTED"));
}
}Forklaring av hvitelisting
Hvitelisting er en alternativ strategi for tilbakekalling. I stedet for å liste opp forbudte tokens vedlikeholder du en liste over aktive, tillatte tokens.
- Når et token utstedes, legges JTI-en til på en «hviteliste».
- For hver forespørsel må tokens JTI finnes på denne hvitelisten for at tokenet skal regnes som gyldig.
- Hvis tokens JTI ikke finnes på hvitelisten, avvises tokenet.
Implementering av en hviteliste
På samme måte som en svarteliste krever en hviteliste et raskt, persistent datalager (for eksempel Redis). Den viktigste forskjellen er hva du lagrer, og hvordan du administrerer det:
- Hver oppføring lagrer vanligvis JWT-ens JTI, ofte knyttet til en bruker-ID.
- Når en bruker logger ut eller endrer passordet sitt, kan alle aktive JTI-er som er knyttet til brukeren, fjernes effektivt fra hvitelisten.
Sammenligning av svarteliste og hviteliste
Begge strategiene muliggjør tilbakekalling, men har ulike konsekvenser:
- Svarteliste: Ideelt ved sjeldne, spesifikke tilbakekallinger (for eksempel hvis ett enkelt token blir kompromittert). Krever mindre lagring hvis tilbakekallinger skjer sjelden.
- Hviteliste: Bedre ved hyppige tilbakekallinger (for eksempel når utlogging av en bruker ugyldiggjør alle tokens). Kan forenkle økthåndtering, men krever mer lagring for alle aktive tokens.
- Valget avhenger av applikasjonens spesifikke behov og hvor ofte tokens tilbakekalles.
Scenario for tilbakekalling
Tenk deg en applikasjon der brukere logger ut ofte, og der du må sikre at alle tokens de har fått utstedt, ugyldiggjøres umiddelbart når de logger ut.
Oppsummering: Strategier for tilbakekalling
I denne leksjonen har vi utforsket avanserte strategier for å tilbakekalle JWT-er, noe som er avgjørende for robust sikkerhet:
- Svartelisting: Markere bestemte tokens som ugyldige ved å legge JTI-en deres til på en liste over forbudte tokens.
- Hvitelisting: Bare tillate tokens som uttrykkelig er oppført som aktive, ofte knyttet til en brukerøkt.
- Den beste fremgangsmåten avhenger av applikasjonens krav, særlig hvor ofte og på hvilken måte tokens ugyldiggjøres.
Deretter skal vi analysere ytelseskonsekvensene av disse teknikkene.
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Svartelisting og hvitelisting av JWT-tokens» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Spring Security 6 og JWT-autentisering, inkludert «Svartelisting og hvitelisting av JWT-tokens», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Spring Security 6 og JWT-autentisering inneholder totalt 4 leksjoner.
Hva lærer jeg i «Svartelisting og hvitelisting av JWT-tokens»?
Gå i dybden på avanserte teknikker for tilbakekalling av tokens, blant annet ved å vedlikeholde svartelister eller hvitelister over tokens. Du øver på Spring Security 6 og JWT-autentisering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Spring Security 6 og JWT-autentisering?
Ingen tidligere erfaring er nødvendig. Spring Security 6 og JWT-autentisering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Svartelisting og hvitelisting av JWT-tokens»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Spring Security 6 og JWT-autentisering-leksjonen?
Ja. Alle Spring Security 6 og JWT-autentisering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Kortlivede JWT-tokens og refresh-syklus
- Svartelisting og hvitelisting av JWT-tokens
- Ytelsesbetraktninger for JWT
- Bufring av tokenvalidering for skalering