Tillämpning av scopes och claims
Tillämpa specifika scopes och claims i inkommande JWT-token för att styra åtkomsten till olika delar av ditt API.
Tillämpning av scopes och claims är en gratis lektion i Spring Security 6 och JWT-autentisering 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 Security 6 och JWT-autentisering, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Security 6 och JWT-autentisering innehåller totalt 4 lektioner.
Auktorisering med scopes och claims
Välkommen! I den här lektionen lär vi oss hur du styr åtkomsten till dina API-slutpunkter med hjälp av scopes och claims i en OAuth2 Resource Server.
Detta är viktiga delar av en JSON Web Token (JWT) som talar om för servern vem användaren är och vad användaren får göra.
Förstå OAuth2-scopes
Tänk på scopes som specifika behörigheter eller åtkomsträttigheter som en klientapplikation begär för en användares räkning.
- De definieras av Resource Server.
- Exempel:
read,write,profile,email. - När en användare beviljar åtkomst inkluderas dessa scopes i den utfärdade JWT:n.
De definierar "vad" en klient kan göra i API:et.
Förklara JWT-claims
Claims är informationsbitar om användaren eller själva token och lagras som nyckel-värde-par i JWT:ns payload.
- Standardclaims:
sub(subject/användar-ID),exp(utgångstid),iss(utfärdare). - Anpassade claims: Du kan lägga till egna data, till exempel
role,departmentelleruser_id.
Claims ger sammanhang kring "vem" användaren är och vilka specifika egenskaper användaren har.
Spring Security och mappning av scopes
När Spring Security bearbetar en inkommande JWT extraherar den automatiskt tokenens scopes.
Därefter omvandlar den dessa scopes till Spring Security-authorities genom att lägga till prefixet SCOPE_.
Exempelvis blir scopet read authorityn SCOPE_read, som sedan kan kontrolleras med hjälp av uttrycksspråket.
@PreAuthorize för scopes
Du kan tillämpa scope-baserad auktorisering på dina API-metoder med Spring Securitys annotation @PreAuthorize.
Med denna annotation kan du definiera SpEL-uttryck (Spring Expression Language) som måste evalueras till true för att metoden ska köras.
Använd hasAuthority('SCOPE_<your_scope>') för att kontrollera ett specifikt scope.
Demonstration av scope-skydd
Låt oss se hur man skyddar en slutpunkt med authorityn SCOPE_read. Endast tokens med scopet 'read' kan komma åt denna resurs.
package com.coddykit.security;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.access.prepost.PreAuthorize;
@SpringBootApplication
@EnableMethodSecurity // Enable @PreAuthorize
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
@Configuration
class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
.oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> {}))
.csrf(csrf -> csrf.disable()); // For simplicity in demo
return http.build();
}
}
@RestController
class DataController {
@GetMapping("/data/public")
public String getPublicData() {
return "This is public data (authenticated)";
}
@GetMapping("/data/secret")
@PreAuthorize("hasAuthority('SCOPE_read')")
public String getSecretData() {
return "This is secret data, requires 'read' scope!";
}
}Använd anpassade claims
Scopes är utmärkta för allmänna behörigheter, medan anpassade claims möjliggör mer finfördelad eller kontextspecifik auktorisering.
Du kan till exempel ha ett role-claim med värden som ADMIN eller USER, eller ett department_id-claim.
Dessa claims är direkt tillgängliga från den autentiserade principalen i Spring Security och erbjuder omfattande kontextuell information.
@PreAuthorize för claims
Du kan också använda @PreAuthorize för att kontrollera specifika claims i JWT:ns payload.
Spring Securitys SpEL gör det möjligt att komma åt den autentiserade principalens claims direkt.
Använd uttryck som #oauth2.token.claims['role'] == 'ADMIN' eller #oauth2.token.claims['department'] == 'IT'.
Demonstration av claim-skydd
Här är ett exempel på en slutpunkt som skyddas av ett anpassat role-claim. Endast användare med role:ADMIN kan komma åt dessa känsliga data.
package com.coddykit.security;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.access.prepost.PreAuthorize;
@SpringBootApplication
@EnableMethodSecurity
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
@Configuration
class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
.oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> {}))
.csrf(csrf -> csrf.disable());
return http.build();
}
}
@RestController
class AdminController {
@GetMapping("/admin/report")
@PreAuthorize("#oauth2.token.claims['role'] == 'ADMIN'")
public String getAdminReport() {
return "Sensitive admin report data!";
}
@GetMapping("/admin/dashboard")
@PreAuthorize("hasAuthority('SCOPE_admin') and #oauth2.token.claims['department'] == 'IT'")
public String getITAdminDashboard() {
return "IT Department Admin Dashboard!";
}
}Snabbtest: scopes och claims
Vilket av följande påståenden beskriver korrekt hur scopes och claims används i Spring Security för en OAuth2 Resource Server?
Sammanfattning: scopes och claims
Vi har gått igenom hur scopes och claims är grundläggande för auktorisering i en OAuth2 Resource Server.
- Scopes definierar breda behörigheter (till exempel
read,write). - Claims innehåller detaljerade användaregenskaper (till exempel
role,department). - Båda kan tillämpas med
@PreAuthorizeoch SpEL-uttryck.
När du behärskar detta kan du skapa robust och flexibel åtkomstkontroll i dina API:er!
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
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Tillämpning av scopes och claims” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Spring Security 6 och JWT-autentisering, inklusive ”Tillämpning av scopes och claims”, 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 Security 6 och JWT-autentisering innehåller totalt 4 lektioner.
Vad lär jag mig i ”Tillämpning av scopes och claims”?
Tillämpa specifika scopes och claims i inkommande JWT-token för att styra åtkomsten till olika delar av ditt API. Ni övar på Spring Security 6 och JWT-autentisering 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 Security 6 och JWT-autentisering?
Du behöver inga förkunskaper. Utbildningen i Spring Security 6 och JWT-autentisering 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 ”Tillämpning av scopes och claims”?
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 Security 6 och JWT-autentisering-lektionen?
Ja. Varje Spring Security 6 och JWT-autentisering-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
- Konfiguration av resursserver
- Avkodning och validering av JWT-token
- Tillämpning av scopes och claims
- Mappa JWT-claims till Spring-behörigheter