Pengenalan DUMEG Identity
DUMEG Identity adalah layanan Single Sign-On (SSO) dan manajemen identitas terpusat berbasis Keycloak yang dirancang untuk mendukung ekosistem aplikasi di lingkungan Duta Meta Graha.
Dengan DUMEG Identity, pengguna hanya memerlukan satu set kredensial untuk mengakses berbagai aplikasi internal DUMEG secara aman, cepat, dan tanpa hambatan perpindahan akun.
1. Konteks Layanan
Layanan DUMEG Identity beroperasi dengan parameter koneksi resmi berikut:
| Parameter | Nilai Konfigurasi | Keterangan |
|---|---|---|
| Identity Provider (IdP) | https://login.dumeg.com | Base URL server identitas Keycloak |
| Realm Target | dumeg-internal | Realm otentikasi ekosistem aplikasi DUMEG |
| Portal Dokumentasi | https://identity.dumeg.com | Developer Portal & Panduan Integrasi SSO |
| Protokol Standar | OpenID Connect (OIDC) & OAuth 2.0 | Standardisasi industri untuk autentikasi modern |
| Alur Rekomendasi | Authorization Code Flow + PKCE S256 | Proteksi pertukaran kode otorisasi dari penyadapan |
Peran Developer Portal
DUMEG Identity bukan aplikasi login baru yang menggantikan Keycloak. Proyek ini adalah Developer Portal & Panduan Integrasi SSO agar para pengembang aplikasi di lingkungan DUMEG dapat menghubungkan layanannya ke Keycloak secara konsisten, aman, dan teruji.
2. Prinsip & Filosofi Integrasi
Pengembangan DUMEG Identity memegang prinsip-prinsip utama sebagai berikut:
A. Integrasi Bersifat Opsional
Aplikasi tidak diwajibkan untuk serta-merta mengganti sistem autentikasi yang sudah ada. Aplikasi yang telah memiliki sistem login lokal (misalnya username/password di database internal) dapat:
- Mempertahankan form login lokal tersebut secara penuh.
- Menyediakan tombol "Masuk dengan DUMEG Identity" sebagai opsi alternatif atau opsi primer.
B. Pemisahan Autentikasi vs Otorisasi
- DUMEG Identity (Autentikasi): Menjawab pertanyaan "Siapakah pengguna ini?" (Verifikasi identitas, profil dasar, email, dan status aktif akun).
- Aplikasi Anda (Otorisasi): Menjawab pertanyaan "Apa yang berhak dilakukan pengguna di aplikasi ini?" (Role, permissions, akses menu, dan kepemilikan data dikelola 100% oleh database dan kebijakan aplikasi Anda).
C. Kedaulatan Data Lokal
Aplikasi tetap memegang tabel data pengguna lokal (users, profiles, dsb.) untuk menyimpan relasi bisnis aplikasi, histori transaksi, dan preferensi lokal tanpa ketergantungan skema data pada Keycloak.
3. Pilihan Model Integrasi Akun Pengguna
Setiap tim pengembang dapat memilih salah satu atau kombinasi strategi pemetaan identitas berikut:
┌───────────────────────────────┐
│ Login Sukses di Keycloak │
│ (Klaim: sub, email, username) │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────┐
│ Apakah `keycloak_id` ada │
│ di database aplikasi? │
└──────┬─────────────┬──────┘
Ya │ │ Tidak
┌───────────────┘ └───────────────────┐
▼ ▼
┌───────────────────────┐ ┌───────────────────────────┐
│ Langsung Terbitkan │ │ Apakah email sudah │
│ Sesi Lokal Aplikasi │ │ terdaftar di tabel lokal? │
└───────────────────────┘ └──────┬─────────────┬──────┘
Ya │ │ Tidak
┌───────────────┘ └─────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ Account Linking │ │ JIT Provisioning │
│ Minta konfirmasi │ │ Buat user baru di │
│ password lokal dulu │ │ tabel dengan role │
│ (Jangan auto-link!) │ │ default terendah │
└─────────────────────┘ └─────────────────────┘1. Account Linking Terverifikasi (Tautkan Akun Lama)
Bagi aplikasi yang sudah memiliki basis pengguna sebelum SSO diimplementasikan:
- Pengguna login via DUMEG Identity.
- Aplikasi mendeteksi bahwa email sudah ada di tabel lokal, tetapi belum memiliki
keycloak_id. - Wajib Verifikasi Kepemilikan: Aplikasi tidak boleh langsung menautkan akun secara otomatis. Aplikasi harus meminta konfirmasi password lokal sekali saja atau mengharuskan penautan akun dilakukan saat pengguna sudah login di menu profil lokal.
2. Just-in-Time (JIT) Provisioning
Bagi pengguna baru yang belum pernah terdaftar di aplikasi:
- Saat pengguna login pertama kali melalui DUMEG Identity dan berhasil divalidasi.
- Aplikasi secara otomatis menyisipkan record baru ke tabel
usersdengan informasi nama dan email dari ID Token Keycloak. - Role standar terendah (least privilege) diberikan kepada pengguna baru sesuai kebijakan sistem.
3. Co-existence / Hybrid Login
Pengguna dipersilakan memilih cara masuk:
- Menggunakan kredensial lokal aplikasi (berguna untuk akun teknis, super-admin darurat, atau akun pihak ketiga).
- Menggunakan DUMEG Identity SSO untuk efisiensi seluruh karyawan internal DUMEG.
4. Endpoint Spesifikasi Keycloak
Keycloak mengekspos endpoint standar OpenID Connect Discovery di mana seluruh konfigurasi kriptografi dan rute URL dapat diakses:
| Endpoint | Metode | URL Spesifikasi | Aksi |
|---|---|---|---|
OpenID Provider Configuration (.well-known) Discovery document metadata spesifikasi OpenID Connect. | GET | https://login.dumeg.com/realms/dumeg-internal/.well-known/openid-configuration | |
Authorization Endpoint Endpoint login & inisiasi authorization code dengan PKCE S256. | GET | https://login.dumeg.com/realms/dumeg-internal/protocol/openid-connect/auth | |
Token Endpoint Pertukaran authorization code dengan ID Token, Access Token, & Refresh Token. | POST | https://login.dumeg.com/realms/dumeg-internal/protocol/openid-connect/token | |
JWKS (JSON Web Key Set) Endpoint Public key untuk validasi signature kriptografi token RS256. | GET | https://login.dumeg.com/realms/dumeg-internal/protocol/openid-connect/certs | |
Userinfo Endpoint Mendapatkan data klaim identitas profil pengguna aktif. | GET / POST | https://login.dumeg.com/realms/dumeg-internal/protocol/openid-connect/userinfo | |
End Session / Logout Endpoint Mengakhiri sesi SSO Keycloak secara terpusat (RP-Initiated Logout). | GET / POST | https://login.dumeg.com/realms/dumeg-internal/protocol/openid-connect/logout |
Discovery Endpoint Otomatis
Library OIDC modern di Laravel, Node.js, Vue, React, maupun Next.js dapat membaca seluruh konfigurasi secara otomatis cukup dengan mengarahkan issuer ke: https://login.dumeg.com/realms/dumeg-internal
5. Pilihan Panduan Integrasi Framework
Pilih panduan implementasi sesuai dengan stack teknologi dan model arsitektur aplikasi Anda:
- Model Autentikasi (SPA vs BFF vs Server-Side): Panduan memilih model autentikasi yang tepat dan pertimbangan keamanannya.
- Developer Quickstart: Panduan dasar Authorization Code Flow dengan PKCE S256.
- Arsitektur Konseptual: Alur konseptual antarkomponen dan batas keamanan.
- Panduan Laravel (PHP): Contoh implementasi referensi backend Laravel dengan koeksistensi login lokal.
- Panduan Vue.js (Frontend): Contoh integrasi Vue 3 dengan Pinia dan pola BFF.
- Panduan React.js (SPA): Contoh integrasi React + Vite menggunakan
react-oidc-contextdan PKCE S256. - Panduan Next.js (App Router): Contoh implementasi BFF server-side dengan Auth.js / NextAuth.
- Panduan NestJS (Backend API): Contoh implementasi backend API dengan validasi JWKS dan session security.
- Standar Keamanan: Checklist audit keamanan wajib sebelum merilis integrasi ke lingkungan production.