Authentication API
Mengamankan endpoint API dengan autentikasi dan otorisasi
Apa itu Authentication API
- Proses memverifikasi identitas user atau aplikasi yang mengakses API
- Memastikan request berasal dari pihak yang sah
- Berbeda dari authorization yang menentukan apa yang boleh dilakukan
Metode Autentikasi API
API Key
- Token sederhana yang dikirim di header setiap request
- Contoh:
X-API-Key: abc123def456 - Cocok untuk server-to-server communication
- Tidak aman untuk client-side karena key bisa diekspos
Token-Based Authentication (JWT)
- Token dikirim di header Authorization
- Format:
Authorization: Bearer <token> - Token berisi informasi user dan expire time
- Server tidak perlu menyimpan session di memory
- Token bisa dibuat di satu service dan diverifikasi di service lain
Session-Based Authentication
- Session ID disimpan di cookie browser
- Server menyimpan data session di memory atau database
- Cookie otomatis dikirim oleh browser di setiap request
- Cocok untuk web application tradisional
Middleware Autentikasi API
Memeriksa Header Authorization
- Middleware membaca header
Authorization - Mengekstrak token dari format
Bearer <token> - Memverifikasi token valid atau tidak
Menolak Request Tidak Terautentikasi
- Jika token tidak ada atau tidak valid, kembalikan 401 Unauthorized
- Jangan berikan informasi detail mengapa gagal
- Cukup kembalikan pesan generik seperti Unauthorized
Menyimpan Data User
- Setelah token diverifikasi, simpan data user ke request object
- Handler endpoint bisa mengakses data user tanpa memverifikasi ulang
Otorisasi API
- Menentukan resource apa yang boleh diakses oleh user
- Bisa berbasis role atau berbasis permission
Role-Based Access Control (RBAC)
- User memiliki role seperti admin, user, atau guest
- Endpoint atau resource dibatasi berdasarkan role
- Contoh: hanya admin yang bisa menghapus data
Permission-Based Access Control
- User memiliki permission spesifik
- Lebih granular daripada role-based
- Contoh: user A punya permission users:read, user B punya users:read dan users:delete
Mengamankan Endpoint
Public Endpoint
- Tidak memerlukan autentikasi
- Contoh: daftar produk, halaman login, register
Protected Endpoint
- Memerlukan autentikasi
- Semua user terautentikasi bisa mengakses
- Contoh: profil user, daftar pesanan sendiri
Restricted Endpoint
- Memerlukan autentikasi dan otorisasi spesifik
- Hanya user tertentu yang bisa mengakses
- Contoh: admin dashboard, data user lain
Keamanan Token
- Token harus selalu dikirim melalui HTTPS
- Token harus memiliki waktu kadaluarsa
- Refresh token bisa digunakan untuk memperpanjang sesi
- Di client browser, simpan token dengan aman
Praktik Terbaik
- Selalu gunakan HTTPS di production
- Validasi token sebelum memproses request
- Jangan simpan token di localStorage untuk aplikasi sensitif
- Gunakan HttpOnly cookie untuk session-based auth
- Implementasikan rate limiting pada endpoint autentikasi
- Logout seharusnya membuat token atau session tidak valid