0Pricing
Spring Security 6 & JWT Authentication · Lektion

Scopes und Claims durchsetzen

Setzen Sie bestimmte Scopes und Claims in eingehenden JWTs durch, um den Zugriff auf verschiedene Bereiche Ihrer API zu steuern.

Scopes und Claims durchsetzen ist eine kostenlose Spring Security 6 & JWT Authentication-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Spring Security 6 & JWT Authentication-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Spring Security 6 & JWT Authentication-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

Authorization with Scopes & Claims

Welcome! In this lesson, we'll learn how to control access to your API endpoints using scopes and claims in an OAuth2 Resource Server.

These are crucial components of a JSON Web Token (JWT) that tell your server who the user is and what they are allowed to do.

Understanding OAuth2 Scopes

Think of scopes as specific permissions or access rights that a client application requests on behalf of a user.

  • They are defined by the Resource Server.
  • Examples: read, write, profile, email.
  • When a user grants permission, these scopes are included in the issued JWT.

They define the "what" a client can do within the API.

JWT Claims Explained

Claims are pieces of information about the user or the token itself, stored as key-value pairs inside the JWT payload.

  • Standard Claims: sub (subject/user ID), exp (expiration time), iss (issuer).
  • Custom Claims: You can add your own data, like role, department, or user_id.

Claims provide context about "who" the user is and their specific attributes.

Spring Security & Scopes Mapping

When Spring Security processes an incoming JWT, it automatically extracts the scopes from the token.

It then converts these scopes into Spring Security authorities by prefixing them with SCOPE_.

For example, a scope read becomes an authority SCOPE_read, which can then be checked using expression language.

@PreAuthorize for Scopes

You can enforce scope-based authorization on your API methods using Spring Security's @PreAuthorize annotation.

This annotation allows you to define SpEL (Spring Expression Language) expressions that must evaluate to true for the method to be executed.

Use hasAuthority('SCOPE_<your_scope>') to check for a specific scope.

Scope Protection Demo

Let's see how to protect an endpoint using the SCOPE_read authority. Only tokens with the 'read' scope can access this resource.

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!";
  }
}

Leveraging Custom Claims

While scopes are great for general permissions, custom claims allow for more fine-grained or context-specific authorization.

For example, you might have a role claim with values like ADMIN or USER, or a department_id claim.

These claims are directly accessible from the authenticated principal in Spring Security, offering rich contextual data.

@PreAuthorize for Claims

You can also use @PreAuthorize to check for specific claims in the JWT payload.

Spring Security's SpEL allows you to access the authenticated principal's claims directly.

Use expressions like #oauth2.token.claims['role'] == 'ADMIN' or #oauth2.token.claims['department'] == 'IT'.

Claim Protection Demo

Here's an example of an endpoint protected by a custom role claim. Only users with role:ADMIN can access this sensitive 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!";
  }
}

Quick Check: Scopes & Claims

Which of the following statements correctly describe the use of scopes and claims in Spring Security for an OAuth2 Resource Server?

Recap: Scopes & Claims

We've covered how scopes and claims are fundamental for authorization in an OAuth2 Resource Server.

  • Scopes define broad permissions (e.g., read, write).
  • Claims provide detailed user attributes (e.g., role, department).
  • Both can be enforced using @PreAuthorize with SpEL expressions.

Mastering these allows for robust and flexible access control in your APIs!

Häufig gestellte Fragen

Ist die Lektion „Scopes und Claims durchsetzen“ kostenlos?

Ja — der vollständige Text von „Scopes und Claims durchsetzen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Spring Security 6 & JWT Authentication-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Spring Security 6 & JWT Authentication-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Scopes und Claims durchsetzen“?

Setzen Sie bestimmte Scopes und Claims in eingehenden JWTs durch, um den Zugriff auf verschiedene Bereiche Ihrer API zu steuern. Du übst Spring Security 6 & JWT Authentication mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Spring Security 6 & JWT Authentication zu starten?

Keine Vorkenntnisse erforderlich. Spring Security 6 & JWT Authentication auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Scopes und Claims durchsetzen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Spring Security 6 & JWT Authentication-Lektion Code schreiben und ausführen?

Ja. Jede Spring Security 6 & JWT Authentication-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ressourcenserver einrichten
  2. JWTs decodieren und validieren
  3. Scopes und Claims durchsetzen
  4. JWT-Claims Spring Authorities zuordnen
← Zurück zu Spring Security 6 & JWT Authentication