8000 GitHub - inii-man/API-Development-2 ยท GitHub
[go: up one dir, main page]

Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

2 Commits

Folders and files

Repository files navigation

๐Ÿ›ก๏ธ TaskHub API Training - Hari 2

Keamanan Lanjutan dan Integrasi Eksternal (Reliability & Resilience)

Node.js 20+ ยท Express ยท SQLite ยท node:crypto ยท TaskHub

Repositori ini adalah implementasi referensi lengkap untuk silabus resmi pelatihan API Development Training Hari 2 (Sesi 4 dan 5 NQA). Seluruh kode, pustaka, middleware, dan skrip pengujian dibangun dari dasar untuk membuktikan konsep keamanan dan perilaku API saat dependensi pihak ketiga mengalami kegagalan.


๐ŸŒŸ Fitur Utama Repositori

  1. ๐ŸŽฎ Interactive Web Playground (/playground): Antarmuka web modern dengan dark-mode glassmorphism untuk menguji seluruh materi: BOLA/IDOR, Mass Assignment, Rate Limiting 429, simulasi manipulasi AES-256-GCM 1-bit, dan Fault Injection Mock Provider secara visual tanpa perlu menghafal curl.
  2. ๐Ÿ“– 8 Modul Bahan Ajar Komprehensif (bahan_ajar/): Menjelaskan seluruh 77 slide pelatihan NQA dari dasar filosofi hingga arsitektur produksi, disertai diagram alur (Mermaid) dan petunjuk praktikum.
  3. ๐Ÿ“š Glosarium Lengkap 51 Kosakata Teknis (bahan_ajar/08_glosarium_dan_kamus_istilah.md): Menerjemahkan dan menguraikan seluruh kosakata sulit bahasa Inggris (BOLA, IDOR, Nonce, AAD, DEK, KEK, Jitter, Backoff, Circuit Breaker, Bulkhead, SSRF, scrypt, HMAC, dll.) beserta analogi dunia nyata.
  4. ๐Ÿ“ Komentar Lini demi Lini di Setiap File Kode: Setiap berkas kode sumber dilengkapi dokumentasi berbahasa Indonesia yang menerangkan apa fungsinya, mengapa dibuat demikian sesuai slide, dan risiko keamanan apa yang dicegah.
  5. ๐Ÿ”Œ Arsitektur Dwi-Server Terisolasi:
    • TaskHub API Gateway (port 8000): Server utama yang menerapkan autentikasi Bearer, otorisasi can_access, validasi skema Zod, Pino structured logging, rate limiting, dan adapter out-bound.
    • Provider Mock Service (port 8001): Server tiruan pihak ketiga yang mengimplementasikan persistensi Idempotency Key di SQLite serta 5 mode kegagalan (fault injection: ok, busy, fail, slow, bad).

๐Ÿ›๏ธ Arsitektur Topologi Sistem (Slide 8 & 50)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ BROWSER CLIENT / CURL (Zona Tidak Tepercaya)           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚ 1. HTTP Request (Bearer Token + Idempotency-Key)
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ TASKHUB API GATEWAY (Express :8000)                    โ”‚
โ”‚ ------------------------------------------------------ โ”‚
โ”‚ โ€ข Request ID Middleware (crypto.randomUUID)            โ”‚
โ”‚ โ€ข Structured Logging (Pino dengan sensor token)        โ”‚
โ”‚ โ€ข CORS Middleware & Rate Limiter (60 req/min/IP)       โ”‚
โ”‚ โ€ข 5 Lapisan Kontrol Input: 413 โž” 415 โž” 400 โž” 422       โ”‚
โ”‚ โ€ข BOLA / IDOR Protection (can_access Policy)           โ”‚
โ”‚ โ€ข SQLite Database (Prepared Statements anti-injeksi)   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚ 2. NotificationAdapter (Timeout 1500ms,
                            โ”‚    Exponential Backoff & Jitter, Circuit Breaker)
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PROVIDER MOCK SERVICE (Express :8001)                  โ”‚
โ”‚ ------------------------------------------------------ โ”‚
โ”‚ โ€ข Persistensi Idempotency Key & Hash di SQLite         โ”‚
โ”‚ โ€ข Deteksi Konflik Payload (409 Conflict)               โ”‚
โ”‚ โ€ข 5 Mode Fault Injection: ok, busy, fail, slow, bad    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿš€ Panduan Memulai Cepat (Quickstart)

Tip

๐Ÿ“– Panduan Instalasi Khusus Pemula s/d Menengah: Jika Anda baru pertama kali menjalankan proyek Node.js atau membutuhkan panduan langkah-demi-langkah yang sangat detail disertai penjelasan setiap perintah dan pemecahan masalah (troubleshooting), silakan baca: ๐Ÿ‘‰ PANDUAN_INSTALASI.md (Klik di sini untuk panduan ramah pemula)

1. Prasyarat Lingkungan

Pastikan Anda menggunakan Node.js versi 20 ke atas:

node -v # Minimal v20.x.x
npm -v

2. Instalasi Dependensi

cd /Users/sulaimansaleh/Documents/API-Development-2
npm install

3. Inisialisasi Basis Data (Seeding)

Isi data awal pengguna (Alice, Bob, Charlie Manager, Diana Admin, Eve) dan tugas:

npm run seed

4. Menjalankan Server

Buka dua terminal terpisah:

Terminal 1 (Jalankan Mock Provider di port 8001):

npm run mock

Terminal 2 (Jalankan TaskHub API di port 8000):

npm start

5. Akses Web Playground

Buka peramban favorit Anda dan kunjungi: ๐Ÿ‘‰ http://127.0.0.1:8000/playground


๐Ÿงช Skrip Pengujian Otomatis

Repositori ini menyertakan skrip otomatis untuk membuktikan seluruh teori di slide:

1. Uji Enkripsi AES-256-GCM & Manipulasi 1-Bit (Slide 38 โ€“ 40)

Membuktikan bahwa manipulasi bit (tampering) pada ciphertext akan ditolak secara kriptografis oleh GMAC Authentication Tag:

npm run crypto-demo

2. Uji Menyeluruh: BOLA, Mass Assignment & Fault Injection (Slide 12, 21, 69)

Menjalankan pengujian end-to-end:

  • Penolakan akses Bob terhadap tugas Alice (BOLA โž” 403 Forbidden).
  • Penolakan Manager Tim A terhadap tugas Bob di Tim B (403 Forbidden).
  • Penolakan injeksi is_admin / role (Mass Assignment โž” 422 Unprocessable Entity).
  • Jaminan Idempotency Key (pengulangan transaksi menghasilkan respons identik).
  • 3 intent gagal berturut-turut memicu Circuit Breaker jeglek ke posisi OPEN selama 10 detik (503 CIRCUIT_OPEN).
npm run test:fault

๐Ÿ“š Daftar Modul Bahan Ajar (bahan_ajar/)

Modul Judul Materi Rujukan Slide
Modul 00 Prasyarat Belajar & Arsitektur Lab TaskHub Slide 1 โ€“ 5, 8, 50
Modul 01 Threat Modeling & Mitigasi BOLA / IDOR Slide 6 โ€“ 14
Modul 02 Kontrol Input, Mass Assignment & Error Handling Slide 15 โ€“ 24
Modul 03 Rate Limiting & Kebijakan Browser CORS Slide 25 โ€“ 31
Modul 04 Kriptografi, Key Management & Secret Safety Slide 32 โ€“ 46
Modul 05 Integrasi Pihak Ketiga & Pola Reliability Slide 47 โ€“ 64, 71
Modul 06 Panduan Praktik Lab Provider Mock & Fault Injection Slide 65 โ€“ 72
Modul 07 Evaluasi, Threat Review & Analisis Gap Produksi Slide 73 โ€“ 77
Modul 08 Glosarium Komprehensif Kosakata & Istilah Teknis Semua 77 Slide

๐Ÿ“‚ Struktur Berkas Repositori

API-Development-2/
โ”œโ”€โ”€ package.json               # Konfigurasi dependensi Node.js ES Modules & skrip
โ”œโ”€โ”€ .env.example               # Contoh template environment variables (Slide 45)
โ”œโ”€โ”€ .env                       # Variabel lingkungan aktif untuk laboratorium
โ”œโ”€โ”€ .gitignore                 # Larangan commit secret, token, dan sqlite (Slide 44)
โ”œโ”€โ”€ openapi.yaml               # Spesifikasi resmi OpenAPI 3.1.0 untuk TaskHub API
โ”œโ”€โ”€ postman_collection.json    # Koleksi Postman siap pakai untuk pengujian
โ”œโ”€โ”€ README.md                  # Dokumentasi utama proyek
โ”œโ”€โ”€ bahan_ajar/                # Modul kurikulum edukasi lengkap (Modul 00 s/d 08)
โ”‚   โ”œโ”€โ”€ README.md
โ”‚   โ”œโ”€โ”€ 00_prasyarat_dan_arsitektur.md
โ”‚   โ”œโ”€โ”€ 01_threat_modeling_dan_bola.md
โ”‚   โ”œโ”€โ”€ 02_input_control_dan_mass_assignment.md
โ”‚   โ”œโ”€โ”€ 03_rate_limiting_dan_cors.md
โ”‚   โ”œโ”€โ”€ 04_kriptografi_dan_secret_management.md
โ”‚   โ”œโ”€โ”€ 05_integrasi_eksternal_dan_reliability.md
โ”‚   โ”œโ”€โ”€ 06_lab_provider_mock_dan_fault_injection.md
โ”‚   โ”œโ”€โ”€ 07_evaluasi_checklist_dan_gap_produksi.md
โ”‚   โ””โ”€โ”€ 08_glosarium_dan_kamus_istilah.md
โ”œโ”€โ”€ playground/                # Antarmuka web interaktif (HTML5 + CSS Modern + JS)
โ”‚   โ”œโ”€โ”€ index.html
โ”‚   โ”œโ”€โ”€ style.css
โ”‚   โ””โ”€โ”€ app.js
โ”œโ”€โ”€ provider-mock/             # Layanan eksternal tiruan (Port 8001)
โ”‚   โ”œโ”€โ”€ index.js               # Server Express Mock (mode: ok, busy, fail, slow, bad)
โ”‚   โ””โ”€โ”€ db.js                  # Persistensi SQLite untuk rekaman idempotensi (Slide 56)
โ”œโ”€โ”€ scripts/                   # Skrip utilitas dan pengujian otomatis
โ”‚   โ”œโ”€โ”€ aes_gcm_demo.js        # Demonstrasi mandiri round-trip AES-256-GCM (Slide 38-40)
โ”‚   โ”œโ”€โ”€ seed.js                # Inisialisasi basis data awal (Alice, Bob, Charlie, dll)
โ”‚   โ””โ”€โ”€ test_fault_injection.js# Test runner otomatis BOLA, Idempotency & Circuit Breaker
โ””โ”€โ”€ src/                       # Server inti TaskHub API (Port 8000)
    โ”œโ”€โ”€ index.js               # Titik masuk utama server Express
    โ”œโ”€โ”€ config.js              # Validasi konfigurasi lingkungan dengan Zod (Slide 45)
    โ”œโ”€โ”€ logger.js              # Logging terstruktur Pino dengan sensor data rahasia
    โ”œโ”€โ”€ db.js                  # SQLite database helper & prepared statements
    โ”œโ”€โ”€ middleware/
    โ”‚   โ”œโ”€โ”€ auth.js            # Validasi Bearer Token (SHA-256 opaque hash)
    โ”‚   โ”œโ”€โ”€ corsConfig.js      # Konfigurasi keamanan CORS (Slide 30)
    โ”‚   โ”œโ”€โ”€ errorHandler.js    # Penanganan error konsisten Express (Slide 23)
    โ”‚   โ”œโ”€โ”€ policy.js          # Kebijakan can_access anti-BOLA/IDOR (Slide 14)
    โ”‚   โ”œโ”€โ”€ rateLimiter.js     # Rate limiter 60 req/min/IP (Slide 27)
    โ”‚   โ””โ”€โ”€ requestId.js       # Generator Request ID (crypto.randomUUID) (Slide 24)
    โ”œโ”€โ”€ routes/
    โ”‚   โ”œโ”€โ”€ authRoutes.js      # /api/v1/auth/login dan /me
    โ”‚   โ”œโ”€โ”€ debugRoutes.js     # Endpoint diagnostik untuk Web Playground
    โ”‚   โ””โ”€โ”€ taskRoutes.js      # /api/v1/tasks CRUD, /notify, dan AES-GCM secret
    โ”œโ”€โ”€ schemas/
    โ”‚   โ””โ”€โ”€ taskSchemas.js     # Skema Zod .strict() & output serializers (Slide 20-22)
    โ””โ”€โ”€ services/
        โ”œโ”€โ”€ circuitBreaker.js  # State machine Circuit Breaker (Slide 58-60)
        โ”œโ”€โ”€ cryptoService.js   # scrypt, SHA-256, dan AES-256-GCM AEAD (Slide 34-40)
        โ””โ”€โ”€ notificationAdapter.js # Adapter ke vendor dengan timeout & retry (Slide 49-63)

๐Ÿ‘ฅ Pengguna Uji Laboratorium (Seed Accounts)

Seluruh akun menggunakan kata sandi default: Password123!

Pengguna Peran (Role) Tim Tenant Peruntukan Pengujian
alice member team-a tenant-1 Pemilik tugas task-alice-101, pengirim notifikasi
bob member team-b tenant-1 Simulasi penyerang BOLA (mencoba mengakses data Alice)
charlie manager team-a tenant-1 Pengujian wewenang manajerial tim (ditolak atas tugas Bob Tim B)
diana admin team-admin tenant-1 Pengujian hak akses menyeluruh dalam satu tenant
eve member team-x tenant-2 Pengujian isolasi multi-tenant batas tenant

๐Ÿ“œ Lisensi & Atribusi

Materi pembelajaran ini dikembangkan berdasarkan silabus resmi API Development Training Hari 2 untuk tujuan edukasi internal dan riset arsitektur perangkat lunak.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0