Membongkar arsitektur Keycloak: core concepts seperti realm, client, user, role, dan group, komponen authentication server, admin console, database, serta berbagai alur autentikasi dan jenis token.

Episode 2 memperkenalkan empat protokol identitas yang didukung Keycloak. Episode 3 ini membongkar bagian dalam Keycloak itu sendiri: konsep inti yang membentuk model datanya, komponen arsitektur yang menyusunnya, alur autentikasi yang bisa dikonfigurasi, serta jenis token yang mengalir di dalamnya. Setelah episode ini, kalian akan nyaman menavigasi admin console karena setiap menu di sana memetakan ke konsep yang dibahas.
Keycloak adalah open-source Identity and Access Management (IAM) yang dikembangkan oleh Red Hat. Beberapa fakta penting:
Model data Keycloak dibangun di atas beberapa konsep inti:
| Konsep | Definisi | Analogi |
|---|---|---|
| Realm | Ruang isolasi untuk user, client, role, dan konfigurasi | Tenant atau domain keamanan |
| Client | Aplikasi yang terhubung ke Keycloak | Aplikasi kalian (web, mobile, API) |
| User | End user yang melakukan autentikasi | Karyawan, pelanggan |
| Role | Izin bernama yang bisa diberikan ke user atau group | Label peran, misalnya admin |
| Group | Kumpulan user yang dikelola bersama | Departemen, tim |
| Identity Provider | Sumber autentikasi eksternal | Google, LDAP, SAML IdP |
| Identity Broker | Jembatan ke identity provider eksternal | Federasi lintas domain |
Realm adalah konsep terpenting: ia adalah batas isolasi. Dua realm berbeda tidak saling melihat user atau client milik realm lain. Karena itu praktik umum adalah membuat satu realm per lingkungan atau per aplikasi.
Client merepresentasikan aplikasi yang meminta autentikasi. Setiap client punya konfigurasi sendiri: tipe akses, redirect URI, dan protokol yang dipakai.
Role dan group adalah fondasi authorisasi. Role menyatakan "boleh apa", group menyatakan "siapa sekelompok", dan kombinasi keduanya menyederhanakan pemberian izin pada skala besar.
Identity Provider adalah sumber autentikasi eksternal yang bisa dihubungkan — misalnya LDAP perusahaan atau penyedia social login. Identity Broker adalah mekanisme yang menghubungkan Keycloak ke IdP tersebut, sehingga user dari luar bisa masuk tanpa perlu akun lokal baru.
Praktik yang perlu diingat sejak awal: identifikasi konsep mana yang sedang kalian sentuh di admin console. Setiap menu di sidebar — Realm Settings, Clients, Users, Roles, Groups — adalah representasi langsung dari konsep di atas.
Secara arsitektur, Keycloak terdiri dari beberapa komponen:
| Komponen | Fungsi |
|---|---|
| Authentication server | Jantung Keycloak: menerima permintaan autentikasi, menerbitkan token |
| Admin console | Antarmuka web untuk mengelola realm, client, user, role, dan konfigurasi |
| Account management console | Antarmuka web untuk pengguna mengelola profil dan sesi sendiri |
| Database | Menyimpan user, konfigurasi, dan event; backend PostgreSQL, MySQL, dan lainnya |
| Theme engine | Sistem templating untuk tampilan halaman login dan konsol |
| Event system | Merekam login, admin action, dan error untuk audit |
Selain konsol web, semua kemampuan admin tersedia lewat Admin REST API. Kalian bisa melakukan apa pun yang dilakukan di admin console lewat API, yang penting untuk otomatisasi:
curl -X POST "http://localhost:8080/realms/master/protocol/openid-connect/token" \
-d "client_id=admin-cli" \
-d "username=admin" \
-d "password=admin123" \
-d "grant_type=password"Respon token dari grant_type=password di atas bisa dipakai sebagai bearer token untuk memanggil endpoint admin seperti GET /admin/realms. Pola ini akan menjadi dasar otomatisasi di banyak episode berikutnya.
Untuk produksi, database backend direkomendasikan menggunakan PostgreSQL atau MySQL. Mode development dengan start-dev memakai database file lokal, tetapi untuk ketersediaan dan keandalan, database eksternal adalah pilihan utama.
Keycloak mengatur alur autentikasi sebagai rangkaian step yang bisa dikonfigurasi. Alur bawaan yang paling sering dipakai:
Setiap alur sebenarnya adalah rantai executor yang berjalan berurutan. Contoh sederhana browser flow:
Dengan memahami rantai ini, kalian bisa menambahkan step kustom seperti OTP, WebAuthn, atau verifikasi email di tengah alur.
Kalian bisa mengatur alur mana yang aktif per realm, dan bahkan membuat alur kustom untuk kebutuhan khusus seperti OTP atau WebAuthn.
Token adalah mata uang utama Keycloak. Empat jenis yang perlu kalian pahami:
| Jenis Token | Dipakai Untuk | Karakteristik |
|---|---|---|
| Access token | Mengakses resource di resource server | Berumur pendek, membawa scopes |
| ID token | Membuktikan identitas pengguna di aplikasi | Khas OIDC, membawa klaim profil |
| Refresh token | Mendapatkan access token baru | Berumur panjang, bisa dirotasi |
| Token introspection | Memvalidasi token di otoritas | Dipanggil resource server |
Durasi hidup token bisa dikonfigurasi di Keycloak: access token umumnya berumur menit, refresh token berumur lebih lama, dan SSO session memiliki timeout sendiri. Konfigurasi yang tepat menjaga keseimbangan antara keamanan dan kenyamanan pengguna.
Dua mekanisme pendukung yang sering muncul di dokumentasi:
Episode 3 membedah arsitektur Keycloak: konsep realm sebagai batas isolasi, client sebagai aplikasi, user, role, dan group sebagai fondasi authorisasi, komponen authentication server beserta konsol dan database, berbagai alur autentikasi, serta jenis token yang mengalir di dalamnya.
Inti yang harus dibawa pulang:
Di episode 4 berikutnya, kalian menyelam ke fundamentals OAuth 2.0 — empat peran utama, komponen endpoint dan scopes, serta semua grant type beserta kapan memakainya.