Skip to content

Arsitektur Konseptual DUMEG Identity ​

Halaman ini memaparkan arsitektur konseptual, model kepercayaan (trust boundaries), dan alur komunikasi teknis antara aplikasi dalam ekosistem Duta Meta Graha dengan DUMEG Identity.


1. Arsitektur Konseptual Ekosistem ​

DUMEG Identity bertindak sebagai penyedia identitas terpusat (Identity Provider / IdP) berbasis OpenID Connect (OIDC) dan OAuth 2.0. Seluruh komunikasi antarkomponen berjalan melalui protokol aman HTTPS.

mermaid
flowchart TD
    subgraph Klien["Pengguna & Klien"]
        Browser["User Agent / Browser\n(Desktop & Mobile)"]
    end

    subgraph EkosistemAplikasi["Ekosistem Aplikasi DUMEG"]
        AppLaravel["Aplikasi Backend (Laravel)\ne.g. sdm.dumeg.com"]
        AppVue["Aplikasi Frontend (Vue.js)\ne.g. dashboard.dumeg.com"]
        AppOther["Sistem Internal Lainnya\ne.g. finance.dumeg.com"]
    end

    subgraph LayananIdentitas["Layanan Identitas Terpusat"]
        Keycloak["DUMEG Identity (IdP)\nhttps://login.dumeg.com\n(Realm: dumeg-internal)"]
        Portal["Developer Portal\nhttps://identity.dumeg.com"]
    end

    Browser -->|"1. Mengakses Layanan Aplikasi"| EkosistemAplikasi
    Browser -->|"2. Redirect Login Terpusat (HTTPS)"| Keycloak
    Browser -->|"3. Membaca Panduan Integrasi"| Portal

    AppLaravel -->|"Pertukaran Token OIDC Back-Channel (HTTPS)"| Keycloak
    AppOther -->|"Pertukaran Token OIDC Back-Channel (HTTPS)"| Keycloak

Komponen Layanan Publik ​

KomponenDomain ResmiPeran & Tanggung Jawab
DUMEG Identity Providerhttps://login.dumeg.comPenyedia autentikasi terpusat (Keycloak Realm dumeg-internal), manajemen sesi Single Sign-On (SSO), penerbitan token JWT (ID Token & Access Token).
Developer Portalhttps://identity.dumeg.comDokumentasi resmi, standar keamanan, arsitektur, dan referensi kode integrasi bagi pengembang aplikasi.
Aplikasi Klien (Relying Party)Domain aplikasi masing-masingAplikasi web yang mengonsumsi layanan identitas DUMEG Identity melalui protokol OpenID Connect.

2. Diagram Alur Autentikasi (Sequence Flow) ​

Berikut alur interaksi standar antara Browser pengguna, Aplikasi Klien, dan DUMEG Identity menggunakan Authorization Code Flow dengan PKCE S256:

mermaid
sequenceDiagram
    autonumber
    actor User as Pengguna
    participant Browser as Browser (User Agent)
    participant Client as Aplikasi Klien (Laravel / Vue)
    participant Keycloak as DUMEG Identity (Keycloak)
    participant LocalDB as Database Lokal Aplikasi

    User->>Browser: Klik tombol "Masuk via DUMEG Identity"
    Browser->>Client: GET /auth/dumeg/login
    Note over Client: 1. Generate code_verifier<br/>2. Hitung code_challenge (S256)<br/>3. Generate state & nonce<br/>4. Simpan di sesi server
    Client-->>Browser: 302 Redirect ke https://login.dumeg.com/.../auth
    Browser->>Keycloak: GET /realms/dumeg-internal/protocol/openid-connect/auth
    Keycloak-->>Browser: Tampilkan Form Login DUMEG Identity
    User->>Browser: Masukkan Kredensial Akun DUMEG
    Browser->>Keycloak: POST Kredensial Pengguna
    Note over Keycloak: Verifikasi Kredensial & Buat Sesi SSO Realm
    Keycloak-->>Browser: 302 Redirect ke Callback Aplikasi dengan ?code=...&state=...
    Browser->>Client: GET /auth/dumeg/callback?code=AUTH_CODE&state=RETURNED_STATE
    Note over Client: 1. Validasi state == session(state)<br/>2. Ambil code_verifier dari sesi
    Client->>Keycloak: POST /protocol/openid-connect/token<br/>(code, code_verifier, client_secret)
    Note over Keycloak: Validasi hash PKCE & Signature Client
    Keycloak-->>Client: Return Tokens: {id_token, access_token, refresh_token}
    Note over Client: Validasi JWT ID Token:<br/>iss, aud, exp, nonce & signature JWKS
    Client->>LocalDB: Cari user berdasarkan keycloak_id (sub)
    alt User Sudah Pernah Terhubung
        Client->>LocalDB: Ambil role & permissions lokal
    else Email Terdaftar Namun Belum Terhubung
        Note over Client: Account Linking Terverifikasi:<br/>Minta verifikasi password lokal (Anti-Hijacking)
    else Pengguna Baru
        Note over Client: JIT Provisioning:<br/>Insert user baru dengan default role terendah
    end
    Client-->>Browser: 302 Redirect ke Dashboard Aplikasi (Sesi Cookie Diterbitkan)
    Browser->>User: Halaman Dashboard Ditampilkan

3. Pemisahan Wewenang: Autentikasi vs Otorisasi ​

DUMEG Identity menerapkan prinsip arsitektur Separation of Concerns:

DomainDikelola OlehTanggung Jawab
Autentikasi (Identity Provider)DUMEG Identity (Keycloak)• Memverifikasi identitas pengguna (sub, email, nama).
• Keamanan kredensial, proteksi brute-force, dan kebijakan password.
• Manajemen sesi Single Sign-On (SSO) terpusat lintas aplikasi.
• Deaktivasi akun karyawan nonaktif secara sentral.
Otorisasi (Application Domain)Aplikasi Anda (Laravel / Vue / DB Lokal)• Peran (Role) pengguna di aplikasi (e.g. Supervisor, Staff Gudang, Auditor).
• Izin operasional (Permissions) fungsional.
• Kepemilikan data dan pembatasan cabang/divisi.
• Riwayat log transaksi dan audit trail bisnis.

Keuntungan Pemisahan Ini

Jika tim pengembang aplikasi ingin menambahkan role baru atau mengubah permission suatu fitur, perubahan cukup dilakukan di database aplikasi lokal Anda tanpa memerlukan perubahan konfigurasi realm Keycloak dari tim infrastruktur.


4. Batas Keamanan Jaringan (Trust Boundaries) ​

  1. Browser Runtime (Untrusted Zone):

    • Beroperasi di lingkungan publik pengguna yang rentan terhadap inspeksi kode dan potensi serangan XSS.
    • Aturan: Jangan pernah mengirimkan client_secret ke browser. Hindari menyimpan token sensitif di localStorage.
  2. Perimeter Enkripsi (HTTPS / TLS):

    • Seluruh endpoint identitas dan aplikasi dilindungi oleh enkripsi HTTPS dan sertifikat TLS yang valid. Komunikasi HTTP biasa tanpa enkripsi dilarang keras di lingkungan produksi.
  3. Server-to-Server Back-Channel (Trusted Zone):

    • Komunikasi langsung antara server aplikasi backend (Laravel) dan DUMEG Identity melalui endpoint token. Dilindungi oleh kombinasi client_secret dan verifikasi hash PKCE.
  4. Database Lokal Aplikasi (Isolated Zone):

    • Database aplikasi lokal menyimpan tabel users dengan foreign reference keycloak_id (UUID format).
    • Apabila koneksi IdP terganggu sesaat, sesi aktif yang sudah tersimpan di aplikasi tetap dapat beroperasi normal.

Developer Portal Single Sign-On (SSO) Ekosistem DUMEG