API Authentication Patterns — Security

Pola Autentikasi API Memilih pola autentikasi yang tepat untuk API sangat penting. Setiap pola memiliki kelebihan dan kekurangan tergantung pada use case. 1. AP

Pola Autentikasi API

Memilih pola autentikasi yang tepat untuk API sangat penting. Setiap pola memiliki kelebihan dan kekurangan tergantung pada use case.

1. API Key

Cara paling sederhana. Client mengirim key statis di header atau query parameter.

// Penggunaan API Key
GET /api/data HTTP/1.1
X-API-Key: sk_live_abc123def456

// Kelebihan: sederhana, mudah diimplementasi
// Kekurangan: tidak bisa identify user, sulit di-rotate
// Cocok untuk: server-to-server communication, public API dengan rate limiting

2. Bearer Token (OAuth/JWT)

Client mengirim token di header Authorization setelah proses autentikasi.

// Bearer Token
GET /api/profile HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

// Flow:
// 1. Client login → server return access token + refresh token
// 2. Client kirim access token di setiap request
// 3. Jika expired, gunakan refresh token untuk dapat token baru

3. Session-based (Cookie)

Cocok untuk same-origin web apps. Server menyimpan state di session store.

// Cookie-based auth
POST /api/login → Set-Cookie: session=abc123; HttpOnly; Secure
GET /api/profile → Cookie: session=abc123 (otomatis dikirim browser)

// Kelebihan: mudah di-revoke, familiar
// Kekurangan: perlu CSRF protection, tidak cocok untuk mobile/cross-origin

4. HMAC Signature

Request ditandatangani dengan secret key. Server memverifikasi signature.

// HMAC request signing
const crypto = require("crypto");
const timestamp = Date.now().toString();
const payload = `${method}\n${path}\n${timestamp}\n${body}`;
const signature = crypto.createHmac("sha256", secretKey)
    .update(payload).digest("hex");

// Header
X-Timestamp: 1700000000
X-Signature: a1b2c3d4...

Perbandingan

Best Practices

Session-based vs Token-based

Session-based menyimpan state di server (database/Redis) dan mengirim session ID via cookie — cocok untuk web tradisional, mudah di-revoke, tapi sulit di-scale horizontal. Token-based (JWT/PASETO) menyimpan state di token itu sendiri — stateless, cocok untuk SPA dan mobile, mudah di-scale, tapi sulit di-revoke sebelum expired.

Yang akan kamu pelajari