Belajar Java - Modern Security Patterns & Access Control
Series/Belajar Java/Episode 14
Episode 14 of 24

Belajar Java - Modern Security Patterns & Access Control

Episode ini membahas pola keamanan modern di Java: pengantar OAuth 2.0 dan OpenID Connect, integrasi dengan Spring Security dan Jakarta Security, secure headers, CORS, CSRF, mitigasi serangan umum, serta pengelolaan credential dan secret di lingkungan produksi.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Episode 13 membangun dasar kriptografi; episode 14 membawa kalian ke pola keamanan modern dan access control yang dipakai aplikasi enterprise. Kalian akan belajar OAuth 2.0 dan OpenID Connect, mengintegrasikan Spring Security, memahami secure headers, CORS, dan CSRF, serta mengelola secret di produksi.

Keamanan aplikasi modern bukan hanya enkripsi — ia tentang mengelola identitas, mengatur hak akses, dan melindungi aplikasi dari serangan yang terus berkembang. Episode ini memberi kalian peta lengkapnya.

Pengantar OAuth 2.0 dan OpenID Connect

OAuth 2.0 untuk Otorisasi

OAuth 2.0 adalah standar otorisasi yang memungkinkan aplikasi mengakses resource atas nama pengguna tanpa membagikan kredensial. Alur dasarnya: klien meminta token ke server otorisasi, lalu memakai token tersebut untuk mengakses resource server.

OpenID Connect untuk Otentikasi

OpenID Connect (OIDC) dibangun di atas OAuth 2.0 dan menambahkan lapisan otentikasi. Ia memperkenalkan ID token yang membawa identitas pengguna. Di ekosistem Java, provider OIDC populer seperti Keycloak dan Okta sering dipakai.

Alur OAuth 2.0 + OIDC
klien -> minta otorisasi -> server otorisasi -> access + ID token -> akses resource

Integrasi dengan Spring Security / Jakarta Security

Menambahkan Spring Security

Spring Security adalah standar de facto keamanan Spring Boot. Tambahkan dependency:

Menambahkan Spring Security
mvn dependency:get -Dartifact=org.springframework.boot:spring-boot-starter-security:3.3.2

Resource Server dengan JWT

Konfigurasi sederhana untuk memvalidasi JWT dari authorization server:

Resource server dengan JWT
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
 
@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated())
            .oauth2ResourceServer(rs -> rs.jwt());
        return http.build();
    }
}

oauth2ResourceServer(rs -> rs.jwt()) membuat aplikasi memvalidasi JWT pada setiap request yang dilindungi.

Jakarta Security

Untuk lingkungan Jakarta EE, gunakan Jakarta Security dengan anotasi:

Jakarta Security dengan anotasi
import jakarta.annotation.security.RolesAllowed;
 
@RolesAllowed({"ADMIN", "USER"})
public class LayananData {
    public String ambilData() {
        return "data sensitif";
    }
}

@RolesAllowed({...}) membatasi akses method berdasarkan role pengguna.

Secure Headers, CORS, CSRF, dan Mitigasi Serangan

Secure Headers

Header keamanan melindungi aplikasi dari serangan berbasis browser. Spring Security menambahkan banyak header secara default: X-Content-Type-Options, X-Frame-Options, dan Strict-Transport-Security. Bisa ditambahkan manual:

Menambahkan secure headers
http.headers(headers -> headers
    .contentSecurityPolicy(csp -> csp.policyDirectives(
        "default-src 'self'; frame-ancestors 'none'")));

CORS: Kontrol Origin

CORS (Cross-Origin Resource Sharing) menentukan origin mana yang boleh mengakses API. Konfigurasikan whitelist origin:

Konfigurasi CORS
http.cors(cors -> cors.configurationSource(request -> {
    var config = new org.springframework.web.cors.CorsConfiguration();
    config.setAllowedOrigins(java.util.List.of("https://app.example.com"));
    config.setAllowedMethods(java.util.List.of("GET", "POST", "PUT", "DELETE"));
    return config;
}));

CSRF dan Mitigasi Serangan Umum

CSRF (Cross-Site Request Forgery) dicegah dengan token CSRF — diaktifkan default untuk aplikasi berbasis session. Untuk API stateless, CSRF sering dinonaktifkan karena tidak ada session. Serangan umum lain yang harus dimitigasi: SQL injection dengan prepared statement, XSS dengan escaping output, dan brute force dengan rate limiting.

Pengelolaan Credential dan Secret di Produksi

Jangan Hardcode Credential

Credential seperti client secret OAuth dan password database tidak boleh ada di source code. Gunakan environment variable seperti yang dibahas di episode 11:

Menyuplai secret lewat environment
export CLIENT_ID="aplikasi-web"
export CLIENT_SECRET="rahasia-sangat-sensitif"

Secret Manager di Produksi

Di lingkungan produksi, gunakan secret manager: HashiCorp Vault, AWS Secrets Manager, atau fitur secret dari platform cloud. Aplikasi membaca secret saat runtime, sehingga kode tetap bersih dan secret bisa dirotasi tanpa deploy ulang.

Info

Pastikan secret dirotasi secara berkala, gunakan prinsip least privilege, dan berikan akses secret manager hanya ke layanan yang benar-benar membutuhkannya.

Penutup

Episode 14 membahas pola keamanan modern: OAuth 2.0 dan OpenID Connect untuk otorisasi dan otentikasi, Spring Security dan Jakarta Security untuk proteksi aplikasi, secure headers, CORS, CSRF, mitigasi serangan umum, serta pengelolaan credential dan secret di produksi.

Inti yang harus dibawa pulang:

  • OAuth 2.0 menangani otorisasi; OIDC menambahkan otentikasi.
  • Spring Security memvalidasi JWT lewat resource server.
  • Jakarta Security memakai anotasi seperti @RolesAllowed.
  • Secure headers, CORS, dan CSRF melindungi aplikasi web.
  • Mitigasi SQL injection, XSS, dan brute force wajib diterapkan.
  • Secret produksi dikelola via secret manager dan dirotasi berkala.

Di episode 15 selanjutnya kita akan membahas concurrency dan parallelism — thread dasar, runnable, dan thread lifecycle, ExecutorService, thread pool, dan task scheduling, synchronization, locks, atomic variable, dan concurrent collections, serta Java Flow API, reactive streams, dan struktur java.util.concurrent. Saatnya memanfaatkan multi-core!

Belajar Java - Modern Security Patterns & Access Control | Belajar Java