Håndheving av scopes og claims
Håndhev bestemte scopes og claims i innkommende JWT-tokens for å kontrollere tilgangen til ulike deler av API-et.
Håndheving av scopes og claims er en gratis leksjon i Spring Security 6 og JWT-autentisering på CoddyKit. Dette er leksjon 3 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.
Autorisasjon med scopes og claims
Velkommen! I denne leksjonen skal du lære hvordan du styrer tilgangen til API-endepunktene dine ved hjelp av scopes og claims i en OAuth2 Resource Server.
Dette er viktige komponenter i et JSON Web Token (JWT) som forteller serveren hvem brukeren er, og hva brukeren har lov til å gjøre.
Forstå OAuth2-scopes
Tenk på scopes som bestemte tillatelser eller tilgangsrettigheter som en klientapplikasjon ber om på vegne av en bruker.
- De defineres av Resource Server.
- Eksempler:
read,write,profile,email. - Når en bruker gir tillatelse, inkluderes disse scopene i det utstedte JWT-et.
De definerer «hva» en klient kan gjøre i API-et.
Forklaring av JWT-claims
Claims er informasjonsbiter om brukeren eller selve tokenet, lagret som nøkkel-verdi-par i JWT-ets payload.
- Standard Claims:
sub(subjekt-/bruker-ID),exp(utløpstidspunkt),iss(utsteder). - Custom Claims: Du kan legge til egne data, for eksempel
role,departmentelleruser_id.
Claims gir kontekst om «hvem» brukeren er, og hvilke spesifikke egenskaper brukeren har.
Spring Security og mapping av scopes
Når Spring Security behandler et innkommende JWT, henter den automatisk ut scopene fra tokenet.
Deretter konverterer den disse scopene til Spring Security-authorities ved å sette prefikset SCOPE_ foran dem.
For eksempel blir scopet read til authority-en SCOPE_read, som deretter kan kontrolleres ved hjelp av uttrykksspråket.
@PreAuthorize for scopes
Du kan håndheve scope-basert autorisasjon på API-metodene dine ved hjelp av Spring Securitys @PreAuthorize-annotasjon.
Denne annotasjonen lar deg definere SpEL-uttrykk (Spring Expression Language) som må evalueres til true for at metoden skal kjøres.
Bruk hasAuthority('SCOPE_<your_scope>') for å kontrollere et bestemt scope.
Demo: Beskyttelse med scope
La oss se hvordan du beskytter et endepunkt ved hjelp av authority-en SCOPE_read. Bare tokens med scopet «read» får tilgang til denne ressursen.
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!";
}
}Utnytte egendefinerte claims
Scopes er nyttige for generelle tillatelser, mens custom claims muliggjør mer finkornet eller kontekstspesifikk autorisasjon.
Du kan for eksempel ha et role-claim med verdier som ADMIN eller USER, eller et department_id-claim.
Disse claimene er direkte tilgjengelige fra den autentiserte principal-en i Spring Security og gir omfattende kontekstuelle data.
@PreAuthorize for claims
Du kan også bruke @PreAuthorize til å kontrollere bestemte claims i JWT-ets payload.
Spring Securitys SpEL lar deg få direkte tilgang til claimene i den autentiserte principal-en.
Bruk uttrykk som #oauth2.token.claims['role'] == 'ADMIN' eller #oauth2.token.claims['department'] == 'IT'.
Demo: Beskyttelse med claim
Her er et eksempel på et endepunkt som er beskyttet av et egendefinert role-claim. Bare brukere med role:ADMIN får tilgang til disse sensitive dataene.
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!";
}
}Kort kontroll: Scopes og claims
Hvilke av følgende påstander beskriver riktig bruken av scopes og claims i Spring Security for en OAuth2 Resource Server?
Oppsummering: Scopes og claims
Vi har gått gjennom hvordan scopes og claims er grunnleggende for autorisasjon i en OAuth2 Resource Server.
- Scopes definerer brede tillatelser (for eksempel
read,write). - Claims gir detaljerte brukeregenskaper (for eksempel
role,department). - Begge kan håndheves ved hjelp av
@PreAuthorizemed SpEL-uttrykk.
Når du behersker dette, kan du lage robust og fleksibel tilgangskontroll i API-ene dine!
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 «Håndheving av scopes og claims» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Spring Security 6 og JWT-autentisering, inkludert «Håndheving av scopes og claims», 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 «Håndheving av scopes og claims»?
Håndhev bestemte scopes og claims i innkommende JWT-tokens for å kontrollere tilgangen til ulike deler av API-et. 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 3 av 4.
Hvor lang tid tar leksjonen «Håndheving av scopes og claims»?
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
- Oppsett av ressursserver
- Dekoding og validering av JWT-tokens
- Håndheving av scopes og claims
- Tilordning av JWT-claims til Spring-authorities