Mengelola sesi di Keycloak: jenis-jenis sesi dan siklus hidupnya, konfigurasi timeout idle dan maksimum, mekanisme single logout antar aplikasi, serta pemantauan dan pencabutan sesi aktif dari admin console.

Sepuluh episode terakhir kalian membangun fondasi autentikasi dan otorisasi dengan Keycloak. Episode 11 ini mengikat semuanya: session management. Kalian sudah tahu bagaimana token dibuat dan dirotasi, tetapi di balik token ada negara bagian bernama sesi — yang menentukan kapan seorang user dianggap "sedang login" di Keycloak dan di aplikasi-aplikasinya.
Saat user login ke aplikasi yang memakai Keycloak, sebenarnya ada beberapa sesi yang berjalan bersamaan:
| Jenis sesi | Dimiliki oleh | Peran |
|---|---|---|
| SSO session | Keycloak | Sesi utama tempat user terautentikasi |
| Client session | Keycloak | Kaitan sesi user dengan satu aplikasi |
| Browser session | Browser user | Cookie sesi Keycloak di browser |
| Offline session | Keycloak | Untuk offline refresh token |
SSO session adalah otak dari semuanya. Begitu user login di satu aplikasi, Keycloak mencatat sesi ini, dan aplikasi lain di realm yang sama bisa memakai sesi yang sama — itulah yang disebut single sign-on. Client session mencatat aplikasi mana saja yang ikut memakai sesi SSO tersebut.
Sesi lahir saat user berhasil melewati autentikasi penuh di Keycloak. Dari situ sesi menjalani siklus hidupnya:
Kunci untuk memahami siklus ini: access token dan refresh token hanyalah cermin dari sesi. Selama sesi SSO hidup, refresh token bisa menukar access token baru. Begitu sesi mati, semua turunannya ikut mati.
Dua angka utama yang mengatur umur sesi ada di Realm settings → Sessions:
Semua pengaturan utama sesi dirangkum dalam tabel berikut:
| Pengaturan | Mengatur | Di-reset aktivitas |
|---|---|---|
| SSO Session Idle | Berapa lama boleh menganggur | Ya |
| SSO Session Max | Batas mutlak usia sesi | Tidak |
| SSO Session Idle Remember Me | Idle untuk sesi remember me | Ya |
| SSO Session Max Remember Me | Max untuk sesi remember me | Tidak |
| Offline Session Idle | Idle untuk sesi offline | Ya |
| Offline Session Max | Max untuk sesi offline | Tidak |
Perhatikan pola yang sama di semua baris: nilai idle bisa diperpanjang oleh aktivitas, nilai max adalah pagar mati. Untuk sesi offline, kedua nilai ini biasanya dibuat jauh lebih panjang — karena offline session memang dirancang bertahan tanpa kehadiran user, seperti aplikasi mobile yang jarang dibuka.
Pembeda keduanya penting: idle di-reset oleh aktivitas, max tidak pernah. Aplikasi yang butuh keamanan tinggi menekan max; aplikasi yang nyaman memberi ruang lebih panjang pada keduanya. Ada juga pengaturan terpisah untuk sesi offline dan untuk mode Remember me seperti di episode 7.
Bila single sign-on membuat login sekali untuk semua aplikasi, single logout (SLO) adalah kebalikannya: logout sekali, semua aplikasi keluar. Keycloak mendukung beberapa mekanisme SLO:
end_session_endpoint.Pola yang dipakai ditentukan di konfigurasi client — Backchannel logout URL untuk back-channel, dan opsi Front channel logout di client. Untuk ekosistem aplikasi yang sehat, aktifkan keduanya.
Cara paling sederhana memulai logout dari aplikasi adalah mengarahkan browser user ke end_session_endpoint:
curl -s "https://kc.example.com/realms/my-realm/protocol/openid-connect/logout" \
-d "client_id=my-app" \
-d "client_secret=4f9a2c8d..." \
-d "id_token_hint=eyJhbGciOi..."protocol/openid-connect/logout adalah end_session_endpoint yang tercantum di metadata discovery episode 9. Parameter id_token_hint memastikan logout benar-benar milik user yang sama, dan parameter post_logout_redirect_uri membawa user kembali ke aplikasi setelah selesai.
Untuk back-channel logout, Keycloak mengirim logout token — JWT khusus bertipe logout+jwt yang memberitahu aplikasi bahwa sesi user telah diakhiri. Aplikasi penerima wajib memvalidasi token ini seperti ID token: cek signature, iss, aud, sub, sid, dan klaim events yang memuat logout.
Admin console menawarkan pandangan langsung ke semua sesi:
Device tracking melengkapi gambarannya: di halaman user, kalian bisa melihat perangkat yang dipakai user dan mencabut sesi per perangkat. Ini sangat berguna saat user melaporkan perangkat hilang atau akun dipakai orang lain.
Untuk otomatisasi, semua operasi ini juga tersedia lewat Admin REST API — sesi bisa dilisting dan dicabut tanpa menyentuh console:
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
"https://kc.example.com/admin/realms/my-realm/users/9c4d5e6f-.../sessions"admin/realms/my-realm/users adalah pangkal dari semua operasi user, termasuk membaca dan mencabut sesi. Gabungkan dengan skrip alerting — misalnya deteksi sesi dari negara lain langsung memicu pencabutan — untuk menjadikan pemantauan sesi sesuatu yang reaktif, bukan sekadar laporan.
Caution
Perhatikan not-before di fitur Revocation: nilainya hanya bertambah, tidak pernah berkurang. Begitu kalian memajukannya, semua token dan sesi yang lahir sebelum waktu itu tidak akan pernah valid lagi — bahkan untuk user yang aktif normal. Gunakan dengan perhitungan matang.
Episode 11 menutup babak OIDC dengan session management: jenis-jenis sesi dan perannya, siklus hidup dari lahir hingga logout, konfigurasi timeout idle dan maksimum, mekanisme single logout termasuk front-channel, back-channel, dan RP-initiated logout, logout token, serta pemantauan dan pencabutan sesi dari admin console.
Inti yang harus dibawa pulang:
Di episode 12 berikutnya kita berpindah dunia: SAML 2.0 — protokol enterprise berbasis XML yang mendahului OIDC. Kalian akan melihat komponen-komponennya, perbandingan SAML dengan OIDC, dan bagaimana Keycloak berdiri sebagai identity provider untuk aplikasi-aplikasi warisan.