Recraftory

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