Bài viết

🔐Xử lý Token Introspection trong Spring Boot với Keycloak

📌 1. Giới thiệu

Trong Spring Boot, khi sử dụng OAuth2 Resource Server, bạn có hai cách để kiểm tra token từ Keycloak:

1️⃣ Dùng JWT (jwt.issuer-uri) → Token tự kiểm tra bằng chữ ký số, nhanh nhưng không kiểm tra được nếu token bị revoke.
2️⃣ Dùng Token Introspection (opaque-token.introspection-uri) → Mỗi lần request sẽ gửi token lên Keycloak để kiểm tra tính hợp lệ.


⚙️ 2. Cấu hình Resource Server với Token Introspection

Để sử dụng Token Introspection, cần cấu hình Spring Boot gửi token lên Keycloak thay vì tự giải mã JWT.

📄 Cấu hình application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
server:
  port: 8081
  servlet:
    context-path: /resource-server-jwt

spring:
  security:
    oauth2:
      resourceserver:
        opaque-token:
          introspection-uri: http://localhost:8083/auth/realms/rasool/protocol/openid-connect/token/introspect
          client-id: change-me
          client-secret: change-me

🔹 Lưu ý:

  • 🛠 introspection-uri: API kiểm tra token từ Keycloak, lấy từ .well-known/openid-configuration.
  • 🔑 client-id & client-secret: Thông tin client đăng ký trong Keycloak.

📄 Cấu hình SecurityConfig.java

Nếu bạn dùng Java config thay vì file .yml, bạn có thể làm như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.opaqueToken());
        return http.build();
    }
}

⚖️ 3. So sánh JWT vs Token Introspection

Cách🚀 Ưu điểm⚠️ Nhược điểm
JWT (jwt.issuer-uri)✅ Hiệu suất cao vì không gọi Keycloak❌ Không kiểm tra được token bị revoke
Token Introspection (opaque-token.introspection-uri)✅ Kiểm tra token mỗi lần request, bảo mật hơn❌ Hiệu suất thấp hơn do phải gọi Keycloak

🎯 4. Kết luận

✔️ Nếu bạn cần hiệu suất cao, hãy dùng JWT.
✔️ Nếu bạn muốn kiểm tra token đã bị revoke hay chưa, hãy dùng Token Introspection. 🚀


🔗 5. Tham khảo

📌 Cách cấu hình Spring Boot để xác thực JWT token qua introspection endpoint

Bài viết này được cấp phép bởi tác giả theo giấy phép CC BY 4.0 .