Belajar Keycloak - Session Management
Episode 11 of 31

Belajar Keycloak - Session Management

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.

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

Pendahuluan

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.

Jenis Sesi di Keycloak

Saat user login ke aplikasi yang memakai Keycloak, sebenarnya ada beberapa sesi yang berjalan bersamaan:

Jenis sesiDimiliki olehPeran
SSO sessionKeycloakSesi utama tempat user terautentikasi
Client sessionKeycloakKaitan sesi user dengan satu aplikasi
Browser sessionBrowser userCookie sesi Keycloak di browser
Offline sessionKeycloakUntuk 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.

Siklus Hidup Sesi

Sesi lahir saat user berhasil melewati autentikasi penuh di Keycloak. Dari situ sesi menjalani siklus hidupnya:

  1. Session creation — terjadi pada login pertama, saat kredensial diverifikasi.
  2. Session refresh — aktivitas apa pun yang menyentuh Keycloak memperbarui waktu last activity sesi.
  3. Session timeout — sesi berakhir saat idle atau masa maksimumnya tercapai.
  4. Session termination — logout eksplisit dari user, admin, atau mekanisme lain.

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.

Konfigurasi Timeout

Dua angka utama yang mengatur umur sesi ada di Realm settingsSessions:

  • SSO Session Idle — berapa lama sesi boleh menganggur tanpa aktivitas. Sesi yang menyentuh batas ini akan kedaluwarsa meskipun belum mencapai batas maksimum.
  • SSO Session Max — batas mutlak usia sesi sejak dibuat. Setelah lewat, user wajib login ulang apa pun aktivitasnya.

Semua pengaturan utama sesi dirangkum dalam tabel berikut:

PengaturanMengaturDi-reset aktivitas
SSO Session IdleBerapa lama boleh menganggurYa
SSO Session MaxBatas mutlak usia sesiTidak
SSO Session Idle Remember MeIdle untuk sesi remember meYa
SSO Session Max Remember MeMax untuk sesi remember meTidak
Offline Session IdleIdle untuk sesi offlineYa
Offline Session MaxMax untuk sesi offlineTidak

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.

Single Logout

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:

  • Front-channel logout — browser diarahkan ke URL logout setiap aplikasi secara bergiliran lewat redirect. Sederhana dan kompatibel dengan aplikasi non-OIDC.
  • Back-channel logout — Keycloak memberi tahu aplikasi lewat panggilan server-ke-server, tanpa melibatkan browser. Lebih andal, cocok untuk aplikasi yang tidak punya sesi browser aktif.
  • RP-initiated logout — aplikasi sendiri yang memulai logout dengan mengarahkan user ke 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.

RP-initiated Logout dan Logout Token

Cara paling sederhana memulai logout dari aplikasi adalah mengarahkan browser user ke end_session_endpoint:

RP-initiated logout
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.

Memantau Sesi

Admin console menawarkan pandangan langsung ke semua sesi:

  • Active sessions — di menu Realm settingsSessions, atau per-client di tab Sessions pada detail client, kalian bisa melihat daftar sesi aktif beserta client yang terlibat.
  • Session analytics — statistik sesi per client membantu memahami pola pemakaian dan mencurigai anomali.
  • Session revocation — sesi bisa diakhiri manual satu per satu atau semuanya; ada juga Revocation dengan not-before policy yang memaksa semua token sebelum titik waktu tertentu dianggap invalid.

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:

Listing sesi user via Admin API
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.

Penutup

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:

  • Token adalah cermin sesi — sesi SSO mati, semua turunannya ikut mati.
  • Idle di-reset aktivitas, max tidak pernah — pahami bedanya saat menyetel timeout.
  • Single logout harus direncanakan — front-channel untuk kompatibilitas, back-channel untuk keandalan.
  • Sesi bisa dipantau dan dicabut — device tracking dan revocation adalah alat penegakan keamanan.

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.

Belajar Keycloak - Session Management | Belajar SSO dengan Keycloak