Belajar Keycloak - Arsitektur & Core Concepts
Episode 3 of 31

Belajar Keycloak - Arsitektur & Core Concepts

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.

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

Pendahuluan

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.

Gambaran Umum Keycloak

Keycloak adalah open-source Identity and Access Management (IAM) yang dikembangkan oleh Red Hat. Beberapa fakta penting:

  • Open source — kode terbuka dengan komunitas besar dan lisensi yang ramah untuk penggunaan komersial.
  • Red Hat SSO — versi komersial berbasis Keycloak yang disertai dukungan vendor.
  • Cloud-native architecture — berjalan sebagai aplikasi Java di atas server, mudah dikontainerisasi dan diorchestrasi.
  • High availability support — mendukung clustering, distribusi cache, dan load balancing.
  • Extensive protocol support — OAuth 2.0, OIDC, SAML 2.0, dan integrasi LDAP.

Core Concepts

Model data Keycloak dibangun di atas beberapa konsep inti:

KonsepDefinisiAnalogi
RealmRuang isolasi untuk user, client, role, dan konfigurasiTenant atau domain keamanan
ClientAplikasi yang terhubung ke KeycloakAplikasi kalian (web, mobile, API)
UserEnd user yang melakukan autentikasiKaryawan, pelanggan
RoleIzin bernama yang bisa diberikan ke user atau groupLabel peran, misalnya admin
GroupKumpulan user yang dikelola bersamaDepartemen, tim
Identity ProviderSumber autentikasi eksternalGoogle, LDAP, SAML IdP
Identity BrokerJembatan ke identity provider eksternalFederasi 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.

Arsitektur Keycloak

Secara arsitektur, Keycloak terdiri dari beberapa komponen:

KomponenFungsi
Authentication serverJantung Keycloak: menerima permintaan autentikasi, menerbitkan token
Admin consoleAntarmuka web untuk mengelola realm, client, user, role, dan konfigurasi
Account management consoleAntarmuka web untuk pengguna mengelola profil dan sesi sendiri
DatabaseMenyimpan user, konfigurasi, dan event; backend PostgreSQL, MySQL, dan lainnya
Theme engineSistem templating untuk tampilan halaman login dan konsol
Event systemMerekam 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:

Contoh akses Admin REST API
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.

Alur Autentikasi

Keycloak mengatur alur autentikasi sebagai rangkaian step yang bisa dikonfigurasi. Alur bawaan yang paling sering dipakai:

  • Browser flow — alur utama untuk login pengguna di browser, termasuk form username dan password.
  • Registration flow — alur pendaftaran pengguna baru.
  • Reset credentials flow — alur reset password.
  • Direct grant flow — login langsung lewat API dengan username dan password, seperti contoh curl di atas.
  • Login flow — istilah umum untuk rangkaian step autentikasi interaktif.

Setiap alur sebenarnya adalah rantai executor yang berjalan berurutan. Contoh sederhana browser flow:

  1. Browser meminta autentikasi ke endpoint authorization.
  2. Executor form menampilkan halaman login dan memvalidasi kredensial.
  3. Jika berhasil, Keycloak menciptakan sesi SSO.
  4. Browser diarahkan kembali ke aplikasi dengan kode.

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.

Jenis Token

Token adalah mata uang utama Keycloak. Empat jenis yang perlu kalian pahami:

Jenis TokenDipakai UntukKarakteristik
Access tokenMengakses resource di resource serverBerumur pendek, membawa scopes
ID tokenMembuktikan identitas pengguna di aplikasiKhas OIDC, membawa klaim profil
Refresh tokenMendapatkan access token baruBerumur panjang, bisa dirotasi
Token introspectionMemvalidasi token di otoritasDipanggil 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:

  • Token introspection — resource server bertanya ke Keycloak apakah sebuah token masih valid dan aktif.
  • Token exchange — menukar satu bentuk token dengan token lain yang sesuai untuk konteks berbeda.

Penutup

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:

  • Realm adalah batas isolasi utama — user dan client satu realm tidak terlihat di realm lain.
  • Semua admin bisa lewat API — Admin REST API membuka pintu otomatisasi.
  • Database eksternal untuk produksi — PostgreSQL atau MySQL menggantikan database development.
  • Token punya peran berbeda — access token, ID token, dan refresh token tidak saling menggantikan.

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.