Menyetel Keycloak setelah terinstal: realm settings, client settings, authentication flows, password policies, serta pengaturan SMTP dan reverse proxy untuk pemakaian produksi.

Di episode 19 kalian berhasil menginstal Keycloak dan memastikan database terhubung. Episode 20 ini tentang menyetel instansi tersebut agar siap dipakai: pengaturan per realm, client settings, alur autentikasi, password policies, SMTP untuk email transaksional, dan konfigurasi di belakang reverse proxy. Inilah episode yang paling banyak bersinggungan dengan admin console.
Hampir semua pengaturan hidup di menu Realm Settings dan berlaku per realm. Berikut kategori utamanya.
Berisi nama realm, alias, dan mode tampilan. Nama realm menentukan bagian dari URL — id.example.com/realms/myrealm — jadi pilih nama yang tetap dan konsisten sejak awal.
Bagian ini mengontrol perilaku login: apakah user boleh mendaftar sendiri (registration), tombol lupa password, verifikasi email, dan remember me. Di sini juga ada pengaturan Default groups yang dibahas di episode 18.
Keycloak menandatangani token dengan key pair yang dikelola per realm. Ada tiga tipe kunci yang umum:
| Tipe Key | Fungsi |
|---|---|
| RSA | Menandatangani JWT, misalnya RS256 |
| HMAC | Signing simetris, misalnya HS256 |
| AES | Enkripsi token |
Key pair RSA secara otomatis di-generate saat realm dibuat. Rotasi dan pembuatan kunci baru dilakukan dari tab Keys.
SMTP dibutuhkan untuk email reset password, verifikasi akun, dan notifikasi. Bisa diatur lewat tab Email di admin console atau lewat environment variable:
KC_SMTP_HOST=smtp.example.com
KC_SMTP_PORT=587
KC_SMTP_FROM=no-reply@example.com
KC_SMTP_AUTH=true
KC_SMTP_USERNAME=noreply
KC_SMTP_PASSWORD=rahasia
KC_SMTP_STARTTLS=trueSelalu uji dengan fitur "test connection" dan kirim email reset password sungguhan setelah mengatur SMTP — ini jalur paling sering gagal saat produksi.
Menentukan tema login, account, admin, dan email per realm. Detail lengkapnya ada di episode 21.
Mengatur bahasa default dan bahasa yang tersedia untuk halaman login serta email. Gabungkan dengan message bundle kustom agar Bahasa Indonesia benar-benar dipakai.
Mengatur header keamanan (Content-Security-Policy, X-Frame-Options, dan lain-lain) serta brute force detection. Ini akan dibahas dalam di episode 24.
Saat Keycloak dipasang di belakang reverse proxy yang mengakhiri TLS, beri tahu lewat KC_PROXY. Mode edge berarti TLS di-terminate di proxy, dan Keycloak membaca header forwarded:
KC_PROXY=edge
KC_HOSTNAME=id.example.com
KC_HOSTNAME_STRICT=trueTanpa pengaturan ini, Keycloak bisa salah menyimpulkan protokol dan menghasilkan redirect dengan skema HTTP.
Client merepresentasikan aplikasi yang memakai Keycloak. Pengaturan pentingnya:
Identifier unik aplikasi, misal webapp atau mobile-api. Client ID muncul di URL authorization dan di token.
Secara historis Keycloak mengenal tiga tipe akses; versi terbaru menyederhanakannya menjadi toggle Client authentication:
| Tipe | Secret | Contoh pemakaian |
|---|---|---|
| Confidential | Ya | Aplikasi backend yang bisa menyimpan secret |
| Public | Tidak | SPA dan aplikasi mobile |
| Bearer-only | Ya | Gateway yang hanya memvalidasi token (legacy) |
Aplikasi server-side memakai confidential; SPA dan mobile memakai public agar secret tidak bocor ke browser.
Daftar URI yang boleh menjadi tujuan redirect setelah login, misal https://app.example.com/callback. Wildcard memang tersedia, tapi terlalu longgar berisiko open redirect — daftarkan URI secara eksplisit bila memungkinkan.
Origin yang diizinkan untuk request lintas-origin, misal https://app.example.com. Ini penting untuk public client agar browser tidak memblokir panggilan ke endpoint Keycloak.
OIDC atau SAML. Kebanyakan aplikasi modern memakai OIDC (berbasis OAuth2 dan JWT); SAML dipertahankan untuk integrasi lama.
Pengaturan lanjutan untuk OIDC: algoritma signature token, mode response, dan bentuk claim di userinfo. Sesuaikan dengan kebutuhan aplikasi, bukan sekadar default.
Alur autentikasi adalah urutan langkah yang dilalui user. Beberapa alur bawaan:
| Flow | Fungsi |
|---|---|
| Browser flow | Alur utama login via browser, termasuk OTP bila diaktifkan |
| Direct grant flow | Login langsung dengan username/password via API |
| Registration flow | Alur pembuatan akun baru |
| Reset credentials flow | Alur reset password lewat email |
| Custom flows | Alur kustom untuk OTP, WebAuthn, dan langkah lain |
Untuk melihat daftar alur dari terminal: kcadm.sh get authentication/flows -r myrealm. Alur kustom untuk OTP dan WebAuthn akan dipakai di episode 23.
Kebijakan password diatur di Realm Settings → Authentication → tab Policies dan berlaku untuk seluruh realm:
| Kebijakan | Maksud |
|---|---|
| Length | Panjang minimum, misalnya 12 karakter |
| Uppercase/Lowercase/Digits/Special chars | Kelas karakter yang wajib ada |
| Expire Password | Masa berlaku password |
| Not Recently Used (History) | Mencegah password lama dipakai ulang |
| Blacklist | Melarang password umum atau lemah |
| Hash algorithm | Algoritma hashing; PBKDF2 adalah default, bisa dialihkan ke BCrypt atau argon2 |
Kombinasi yang umum untuk produksi: length 12, semua kelas karakter, history 5, dan blacklist aktif. Jangan lupa kebijakan ini hanya berlaku untuk password, bukan faktor autentikasi lain.
Pada episode 20, kalian menyetel Keycloak: realm settings (general, login, keys, email, themes, localization, security defenses), client settings (ID, access type, redirect URIs, CORS, protocol, fine grain OIDC), authentication flows, password policies, serta SMTP dan reverse proxy untuk produksi.
Inti yang harus dibawa pulang:
KC_PROXY=edge untuk pemasangan di belakang reverse proxy — tanpa ini protokol bisa salah terdeteksi.Di episode 21 berikutnya, kalian akan mengubah tampilan Keycloak agar tidak terasa generik: Themes & Customization — login, account, admin, email, dan welcome theme.