Kapsam ve taleplerin uygulanması
API'nizin farklı bölümlerine erişimi denetlemek için gelen JWT'lerde belirli kapsamları ve talepleri zorunlu kılın.
Kapsam ve taleplerin uygulanması, CoddyKit'te ücretsiz bir Spring Security 6 & JWT Authentication dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Spring Security 6 & JWT Authentication öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Spring Security 6 & JWT Authentication kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
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, oruser_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
@PreAuthorizewith SpEL expressions.
Mastering these allows for robust and flexible access control in your APIs!
Sıkça Sorulan Sorular
“Kapsam ve taleplerin uygulanması” dersi ücretsiz mi?
Evet — “Kapsam ve taleplerin uygulanması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Spring Security 6 & JWT Authentication kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Spring Security 6 & JWT Authentication kursu toplamda 4 dersten oluşur.
“Kapsam ve taleplerin uygulanması” dersinde ne öğreneceğim?
API'nizin farklı bölümlerine erişimi denetlemek için gelen JWT'lerde belirli kapsamları ve talepleri zorunlu kılın. Spring Security 6 & JWT Authentication ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Spring Security 6 & JWT Authentication öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Spring Security 6 & JWT Authentication, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Kapsam ve taleplerin uygulanması” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Spring Security 6 & JWT Authentication dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Spring Security 6 & JWT Authentication dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Kaynak sunucusu kurulumu
- JWT'lerin kodunu çözme ve doğrulama
- Kapsam ve taleplerin uygulanması
- JWT Bildirimlerini Spring Yetkilerine Eşleme