Standar Autentikasi HMAC-SHA256

Cara mengamankan dan menandatangani permintaan API SmallPict menggunakan tanda tangan kriptografis HMAC-SHA256.

Standar Autentikasi HMAC-SHA256

SmallPict mengamankan seluruh jalur komunikasi API menggunakan tanda tangan kriptografis HMAC-SHA256.

Keunggulan standar ini:

  1. Integritas Data: Mencegah modifikasi isi body atau path request di tengah jalan (anti-tampering).
  2. Kebal Replay Attack: Validasi selisih waktu (timestamp drift) menolak request yang ditangkap ulang oleh penyusup.
  3. Secret Tetap Aman: Secret key tidak pernah dikirimkan melalui jaringan.

📋 Header HTTP Wajib

Setiap request wajib menyertakan 3 header berikut:

X-API-Key: sp_live_9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b
X-Timestamp: 1716301234
X-Signature: 3a9f8b2c4d6e8a0f1b3c5d7e9f2a4b6c8d0e1f3a5b7c9d1e3f5a7b9c1d3e5f7a
HeaderTipeDeskripsi
X-API-KeyStringAPI Key pelanggan Anda (misal sp_live_..., sp_test_..., sp_sdk_...)
X-TimestampString AngkaWaktu Unix timestamp dalam satuan detik saat request dikirim
X-SignatureHex StringHasil kalkulasi tanda tangan HMAC-SHA256 menggunakan Secret Key Anda

🔐 Algoritma Tanda Tangan

1. Susun String-To-Sign

Gabungkan HTTP method, path, timestamp, dan hash SHA-256 dari request body yang dipisahkan baris baru (\n):

{HTTP_METHOD}\n{PATH}\n{TIMESTAMP}\n{BODY_SHA256_HEX}
  • Jika request tidak memiliki body (seperti GET), gunakan hash SHA-256 dari string kosong: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.

2. Hitung Tanda Tangan

Signature = hex(HMAC_SHA256(SecretKey, StringToSign))

⏱️ Toleransi Selisih Waktu (Timestamp Drift)

SmallPict menerapkan batas toleransi selisih waktu ±300 detik (5 menit). Request dengan selisih waktu lebih besar akan ditolak dengan error 401 Unauthorized (ERR_TIMESTAMP_DRIFT).