Skip to content

Fitur Single Sign-On (SSO) dari OpenKab ke OpenSID untuk Administrator Desa #1103

Description

@analisopendesa

Deskripsi

Implementasi fitur Single Sign-On (SSO) yang memungkinkan administrator OpenKab untuk mengakses panel admin OpenSID secara langsung dari dashboard OpenKab tanpa perlu login manual. Fitur ini akan meningkatkan efisiensi namun dengan standar keamanan yang ketat.

Tujuan

  1. Memudahkan administrator desa untuk mengakses OpenSID tanpa login ulang
  2. Menjaga integritas dan keamanan data sensitif
  3. Mencatat semua akses untuk audit trail yang komprehensif
  4. Meminimalkan risiko keamanan melalui multiple layer proteksi

Alur Fitur

Alur Login:

  1. Administrator desa (yang sudah terautentikasi & aktif 2FA) melihat daftar desa di OpenKab
  2. Klik tombol "Masuk ke OpenSID" pada desa yang dipilih
  3. OpenKab mengirim POST request ke endpoint khusus di OpenKab untuk generate session
  4. Server OpenKab memvalidasi kredensial, permissions, dan 2FA status
  5. Jika berhasil, generate signed session token
  6. Redirect ke halaman admin OpenSID dengan session token yang sudah terverifikasi
  7. OpenSID memverifikasi token dan membuat session user
  8. Catat aktivitas di log OpenSID

Flow Teknis:

OpenKab Dashboard
    ↓
User klik "Masuk ke OpenSID"
    ↓
POST /api/openkab/generate-session (OpenKab)
    ↓
Validasi: Admin? 2FA aktif? Token valid?
    ↓
Generate signed JWT/token + CSRF protection
    ↓
Redirect ke OpenSID dengan token (POST/Cookie)
    ↓
OpenSID verifikasi token dengan OpenKab
    ↓
Create session di OpenSID
    ↓
Log aktivitas ke database
    ↓
Redirect ke admin panel OpenSID

Persyaratan Keamanan (WAJIB)

Autentikasi & Otorisasi:

  • Hanya untuk Administrator: Validasi role/permission di level OpenKab sebelum generate session
  • 2FA Mandatory: User HARUS aktif login dengan 2FA untuk menggunakan fitur ini
  • Session Active: Hanya user dengan session aktif yang bisa mengakses fitur ini
  • IP Whitelist (Opsional): Pertimbangkan membatasi akses hanya dari IP tertentu untuk added security

Token & Session:

  • Signed Token (JWT/HMAC): Gunakan algorithm yang kuat (RS256/HS256 dengan key yang cukup panjang)
  • Token Expiry: Set waktu expired token sangat singkat (5-10 menit maksimal)
  • One-Time Use: Sesekali implementasi one-time token jika memungkinkan
  • CSRF Protection: Implementasi CSRF token untuk mencegah cross-site forgery
  • Rate Limiting: Batasi jumlah request generate-session per user per menit
  • Token Signature Secret: Pastikan secret key disimpan dengan aman, jangan hardcoded

Komunikasi & Transport:

  • HTTPS Only: Semua komunikasi harus via HTTPS dengan valid SSL certificate
  • Secure Cookies: Gunakan HttpOnly, Secure, SameSite flags untuk cookies
  • Origin Validation: Validasi origin/referer dari request
  • Method POST: Gunakan POST dengan body, jangan GET dengan query params

Validasi & Verifikasi:

  • Verify at OpenSID: OpenSID HARUS verifikasi token dengan OpenKab sebelum membuat session
  • Double-Check Permissions: OpenSID verifikasi permission user di OpenSID database juga
  • Signature Verification: Verifikasi signature/HMAC dari token
  • Timestamp Validation: Check timestamp di token untuk mencegah replay attack
  • User State Check: Pastikan user tidak sedang dalam status locked/suspended/deleted

Audit & Logging:

  • Comprehensive Logging: Log SETIAP attempt (berhasil/gagal) di kedua system
  • Log Details: Catat: timestamp, user_id, admin_id, desa_id, IP, user_agent, token_fingerprint, result
  • Immutable Logs: Simpan logs di database dengan protection terhadap deletion
  • OpenKab Logs:
    • Endpoint: openkab_sso_logs table
    • Columns: id, admin_id, desa_id, attempt_time, status, reason_if_failed, ip_address, user_agent, token_fingerprint
  • OpenSID Logs:
    • Endpoint: opensid_sso_logs table
    • Columns: id, user_id, desa_id, attempt_time, status, token_fingerprint, ip_address, referrer
  • Audit Dashboard: Provide dashboard untuk review SSO login attempts

Error Handling:

  • Generic Error Messages: Jangan expose detail teknis untuk user (log detail di backend)
  • Don't Expose User Data: Response jangan berisi username/email/personal info
  • Fail Safely: Default ke reject jika ada ambiguitas

Risiko Keamanan yang Perlu Dimitigasi

  1. Session Hijacking:

    • Mitigasi: Token signing, HTTPS, short expiry, same-site cookies
  2. Privilege Escalation:

    • Mitigasi: Double-check permissions di OpenSID, validate role di OpenKab
  3. Account Takeover:

    • Mitigasi: 2FA requirement, rate limiting, audit logs
  4. CSRF Attack:

    • Mitigasi: CSRF token, SameSite cookie flag, origin validation
  5. Token Tampering:

    • Mitigasi: Digital signature (HMAC/JWT), timestamp validation
  6. Replay Attack:

    • Mitigasi: Token expiry, one-time use, nonce/jti, timestamp check
  7. Man-in-the-Middle:

    • Mitigasi: HTTPS only, certificate pinning (optional)
  8. Brute Force / Rate Limiting Bypass:

    • Mitigasi: Rate limiting, exponential backoff, account lock after attempts

Acceptance Criteria

  • User dengan role Administrator dan 2FA aktif bisa klik "Masuk ke OpenSID" di halaman daftar desa
  • OpenKab generate signed session token dengan validasi ketat
  • OpenKab redirect user ke OpenSID dengan token yang aman
  • OpenSID verifikasi token dengan OpenKab dan buat session
  • User ter-redirect ke admin panel OpenSID setelah verifikasi berhasil
  • Semua aktivitas dicatat di log database OpenKab dan OpenSID
  • Error handling yang aman tanpa expose detail teknis
  • Security test: Attempt dengan invalid token → rejected
  • Security test: Attempt dengan expired token → rejected
  • Security test: Attempt tanpa 2FA → rejected
  • Security test: Attempt dengan non-admin user → rejected
  • Rate limiting berfungsi dengan baik
  • Audit logs dapat diakses dan direview oleh super admin

Implementasi & Dependencies

API Endpoint OpenKab:

POST /api/openkab/generate-session
Headers:
  - Content-Type: application/json
  - X-CSRF-Token: [csrf_token]
Body:
{
  "desa_id": 123,
  "timestamp": 1234567890,
  "signature": "hmac_sha256(...)"
}

Response (Success):
{
  "status": "success",
  "redirect_url": "https://opensid.example.com/admin/sso-login",
  "token": "eyJhbGc...",
  "token_method": "post_param|cookie",
  "expires_at": 1234567920
}

Response (Error):
{
  "status": "error",
  "message": "Authentication failed",
  "code": "AUTH_FAILED"
}

API Endpoint OpenSID:

POST /admin/sso-login
Body/Cookie:
{
  "sso_token": "eyJhbGc..."
}

Response:
{
  "status": "success|error",
  "redirect": "/admin/dashboard"
}

Referensi Keamanan

  • OWASP Session Management Cheat Sheet
  • OWASP Token Security Best Practices
  • JWT Best Practices (RFC 7519)
  • CSRF Prevention Cheat Sheet
  • Secure Cookie Flags

Task Breakdown

Sub-issues yang diperlukan:

  1. Design security architecture & token format
  2. Implement OpenKab backend: generate-session endpoint
  3. Implement OpenKab frontend: login button & redirect logic
  4. Implement OpenSID backend: SSO token verification
  5. Implement database logging di kedua system
  6. Implement audit dashboard untuk review logs
  7. Security testing & penetration test
  8. Documentation & deployment guide

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions