Macam-Macam API Key Beserta Ilustrasinya - Panduan Autentikasi API Modern

pindipin
27 September 2026
9 min read

Hampir setiap proyek web modern berinteraksi dengan API key—saat memasang payment gateway (Stripe/Midtrans), peta Google Maps, OpenAI, atau membangun REST API sendiri di Laravel dan Node.js. Namun, banyak developer menganggap semua API Key sama: sekadar string rahasia yang dimasukkan ke header HTTP atau file .env.

Anggapan ini berisiko memicu celah keamanan fatal:

  • Menuliskan secret key di JavaScript frontend (React/Vue/browser) sehingga mudah dicuri via Inspect Element.
  • Memasukkan data sensitif seperti password atau NIK ke payload JWT karena menganggap JWT dienkripsi.
  • Lupa memverifikasi signature callback webhook pembayaran, sehingga peretas bisa memalsukan status transaksi menjadi "PAID" dengan curl.
  • Meng-commit file .env atau service-account-key.json ke repositori publik GitHub.

Artikel ini membedah 9 jenis API Key dan mekanisme autentikasi API modern, lengkap dengan cara kerja, contoh industri, kelebihan-kekurangan, serta diagram alur ASCII.


Apa Itu API Key dan Mengapa Jenisnya Berbeda-beda?

API Key adalah kredensial digital berupa string teks untuk mengidentifikasi dan memverifikasi aplikasi atau pengguna yang mengirim request ke API server.

Untuk memahami variasi jenisnya, pisahkan dua konsep utama: Authentication dan Authorization.

  • Authentication (Autentikasi): Membuktikan identitas pengirim request ("Siapa Anda?").
  • Authorization (Otorisasi): Menentukan hak akses atau izin yang diperbolehkan ("Apa yang boleh Anda lakukan?").

Mengapa Jenis API Key Beragam?

Kebutuhan lapangan menentukan jenis kredensial:

  1. Frontend vs Backend: Browser (frontend JS) tidak bisa menyimpan kata sandi rahasia. Backend server aman menyimpan secret key.
  2. Identitas Pengirim: Akses atas nama pengguna terautentikasi, entitas proyek, atau proses otomatis (cron job/bot).
  3. Penyimpanan Sesi: Pengecekan status di database (stateful) atau verifikasi kriptografi mandiri tanpa database (stateless).
  4. Keamanan Transpor: Pengiriman token langsung di header jaringan versus pengolahan tanda tangan digital (HMAC signature).

9 Jenis API Key & Mekanisme Autentikasi Modern


1. Standard API Key (Simple String Token)

Standard API Key adalah token string tunggal acak (opaque token) untuk mengidentifikasi proyek atau akun pengirim request.

  • Mekanisme: Client mengirim key via Query Parameter (?api_key=xyz123) atau HTTP Header (X-API-Key: xyz123). Server mencocokkan key di database/cache untuk mengidentifikasi caller, melacak rate limit, dan mencatat billing.
  • Contoh Nyata: Google Maps JavaScript API Key (AIzaSy...), OpenWeatherMap API Key, Mailgun API Key.
  • Keamanan: Mengidentifikasi proyek, bukan pengguna spesifik. Untuk penggunaan frontend (Google Maps), key wajib dibatasi dengan HTTP Referrer Restriction atau IP Restriction.
  • Kelebihan: Sederhana dan cepat diimplementasikan.
  • Kekurangan: Tanpa konteks pengguna, berisiko jika bocor tanpa restriksi domain/IP.

2. Bearer Token (RFC 6750)

Bearer Token (RFC 6750) bekerja dengan prinsip "barangsiapa memegang token ini (bearer), ia diberikan hak akses".

  • Mekanisme: Client mengirimkan token pada header HTTP Authorization:
    Authorization: Bearer eYJhbGciOiJIUzI1NiIsInR5cCI6...
    
    API server membaca string token setelah skema Bearer dan memvalidasinya.
  • Contoh Nyata: OAuth 2.0 Access Token, Laravel Sanctum Token, Stripe REST API.
  • Keamanan: Siapa pun yang memegang token mendapat akses. HTTPS/TLS hukumnya wajib agar token tidak diintersepsi di jaringan.
  • Kelebihan: Format standar industri HTTP, kompatibel dengan semua HTTP client.
  • Kekurangan: Rentan jika token bocor atau disimpan sembarangan di client-side.

3. OAuth 2.0 Tokens (Access Token & Refresh Token - RFC 6749)

OAuth 2.0 (RFC 6749) adalah standar otorisasi terdelegasi yang memungkinkan aplikasi pihak ketiga mengakses data atas nama pengguna tanpa meminta password pengguna.

  • Mekanisme: Menggunakan dua token: Access Token berumur pendek (misal 1 jam) untuk memanggil API, dan Refresh Token berumur panjang (disimpan di backend aman) untuk meminta Access Token baru saat kadaluarsa.
  • Contoh Nyata: Google Sign-In, GitHub OAuth App, Spotify API Authorization Code Flow dengan PKCE.
  • Keamanan: Mendukung fine-grained scopes (izin spesifik seperti read:profile). Access Token yang kadaluarsa cepat meminimalkan dampak kebocoran.
  • Kelebihan: Keamanan tinggi, kontrol izin presisi.
  • Kekurangan: Alur handshake otorisasi lebih kompleks.

4. JWT (JSON Web Token - RFC 7519)

JSON Web Token (RFC 7519) adalah format token mandiri (self-contained) bertanda tangan digital yang membawa klaim data JSON. JWT terdiri dari 3 bagian: Header.Payload.Signature.


  • Mekanisme: Server menandatangani JWT dengan Secret Key (HMAC) atau Private Key (RS256). Saat client mengirim JWT di request berikutnya, API server memverifikasi Signature secara stateless tanpa query database.
  • Contoh Nyata: Laravel Tymon JWT, Auth0, Firebase Authentication.
  • Peringatan Keamanan:

    Payload JWT bawaan hanya di-encode Base64Url, BUKAN dienkripsi. Siapa pun bisa membaca isi payload di jwt.io. Jangan pernah menyimpan password, nomor kartu kredit, atau NIK di payload JWT!

  • Kelebihan: Stateless, efisien untuk microservices.
  • Kekurangan: Pembatalan token seketika (instant revocation) membutuhkan mekanisme blacklist tambahan.

5. API Key + Secret Pair / HMAC Request Signing (AWS SigV4)

HMAC Request Signing menggunakan pasangan Access Key ID (publik) dan Secret Access Key (rahasia). Secret Access Key tidak pernah dikirimkan melalui jaringan HTTP.

  • Mekanisme: Client membuat signature berbasis HMAC-SHA256 dari parameter HTTP request (Method, Path, Body, Timestamp) menggunakan Secret Key. Server menghitung ulang HMAC dari request yang diterima dan mencocokkannya.
  • Contoh Nyata: AWS Signature Version 4 (SigV4) pada Amazon S3 REST API, Midtrans Signature.
  • Keamanan: Anti-Tampering (perubahan body request membatalkan signature) dan Anti-Replay Attack (waktu request dibatasi maksimal 5 menit).
  • Kelebihan: Keamanan tertinggi, rahasia tidak pernah melintasi jaringan.
  • Kekurangan: Kalkulasi signature di client dan server lebih kompleks.

6. Service Account Key

Service Account Key berupa file konfigurasi (file JSON) yang berisi Private Key RSA milik akun layanan (Service Account) non-manusia untuk otomatisasi server-to-server.

  • Mekanisme: SDK backend membaca private key dari file JSON, menandatangani JWT assertion, lalu menukarkannya dengan short-lived Access Token (berlaku 1 jam) dari Auth Server cloud.
  • Contoh Nyata: Google Cloud Service Account Credentials (service-account-key.json), Firebase Admin SDK.
  • Keamanan: Mengidentifikasi entitas server infrastruktur. Jika file JSON terkomit ke Git publik, peretas mendapat akses penuh ke cloud.
  • Kelebihan: Sangat andal untuk otomasi backend (cron job, data pipeline).
  • Kekurangan: Berisiko tinggi jika file kredensial bocor.

7. Webhook Secret / Webhook Signing Key

Webhook Secret adalah kunci rahasia bersama (shared secret) yang digunakan oleh penyedia layanan (publisher) untuk menandatangani payload notifikasi HTTP POST ke server pengembang (subscriber).

  • Mekanisme: Publisher menghitung HMAC-SHA256 dari payload dan menyertakannya di header (misal Stripe-Signature). Pada Stripe API secara spesifik, string yang di-hash HMAC adalah gabungan timestamp t dan raw body payload (t.payload) untuk mencegah Replay Attack. Server subscriber mengambil timestamp t dari header, mengambil raw body mentah, menghitung ulang HMAC-SHA256(t.payload, webhook_secret), lalu mencocokkannya dengan signature v1.
  • Contoh Nyata: Stripe Webhook Signing Secret (whsec_...), GitHub Webhook Secret, Midtrans / Xendit Notification Signature.
  • Keamanan: Mencegah Webhook Spoofing (pemalsuan request POST oleh peretas) dan Replay Attack.
  • Kelebihan: Menjamin validitas notifikasi asynchronous.
  • Kekurangan: Membutuhkan pembacaan raw body sebelum JSON diparse di backend.

8. Personal Access Token (PAT)

Personal Access Token (PAT) adalah token pengganti password berumur panjang yang digenerasi pengguna melalui dashboard akun untuk kebutuhan skrip CLI, bot, atau CI/CD pipeline.

  • Mekanisme: Pengguna menggenerasi token dengan masa berlaku dan scope spesifik dari dashboard. Token digunakan pada CLI atau environment secrets CI/CD.
  • Classic vs Fine-Grained PAT (GitHub): PAT Classic memberikan akses luas ke seluruh repositori. Fine-Grained PAT membatasi akses per repositori, per izin spesifik (misal contents:read), serta memiliki batas expired.
  • Contoh Nyata: GitHub Fine-Grained PAT, GitLab PAT, Bitbucket App Passwords.
  • Kelebihan: Menghindari pembagian password utama, token dapat dicabut individual.
  • Kekurangan: Token tanpa masa kadaluarsa berisiko jika bocor.

9. Client ID & Client Secret (OAuth App Credentials)

Client ID dan Client Secret adalah pasangan kredensial untuk mengautentikasi aplikasi pengembang (Confidential Client) ke Authorization Server.

  • Mekanisme: Client ID adalah identifier publik aplikasi (seperti username), sedangkan Client Secret adalah kata sandi aplikasi. Digunakan pada OAuth Client Credentials Grant (machine-to-machine) atau saat penukaran authorization code.
  • Contoh Nyata: Spotify Developer App Credentials, Twitter/X API v2 App Credentials, Google Cloud OAuth Credentials.
  • Keamanan: Client Secret HARAM dipakai di browser atau app mobile. Aplikasi mobile/SPA wajib menggunakan OAuth 2.0 dengan PKCE.
  • Kelebihan: Mengamankan identitas aplikasi bisnis ke provider API.
  • Kekurangan: Kebocoran Client Secret memerlukan rotasi dan re-deploy konfigurasi server.

Tabel Perbandingan Komprehensif Jenis-Jenis API Key

Jenis API KeySkema Header / PengirimanStatus ValidasiHak Akses (Scopes)Risiko Keamanan UtamaKasus Penggunaan Utama
Standard API KeyX-API-Key / Query ?api_key=Stateful (DB/Cache)Proyek GlobalBocor di frontend tanpa restriksiMaps Widget, Weather API
Bearer TokenAuthorization: BearerStateless / StatefulSesuai jenis tokenToken dicuri di jaringan tanpa HTTPSREST API General, SPA Client
OAuth 2.0 TokensAuthorization: BearerStateful / StatelessFine-grained per userRefresh token bocor di client-sideLogin Google/GitHub, Data User
JWTAuthorization: BearerStateless (Kriptografi)Klaim JSON PayloadData sensitif di payloadMicroservices, Sesi User
HMAC SignaturesHeader X-SignatureStateless / StatefulSesuai Secret KeyReplay attack, hash mismatchAWS S3, Payment Gateway
Service Account KeyFile JSON Credentials / JWTStateless (Exchange)IAM Role CloudFile JSON terkomit ke GitServer Cloud (GCP/Firebase)
Webhook SecretHeader SignatureStateless (HMAC Payload)N/A (Event Notification)Tanpa verifikasi signatureCallback Payment, Event GitHub
Personal Access TokenHeader Authorization: BearerStateful (DB User Token)Scope terbatasToken tanpa tanggal kadaluarsaAutomasi CI/CD, Script CLI
Client ID & SecretPOST Body / Basic Auth HeaderStateful (App Auth)Hak Akses AplikasiClient Secret dipasang di FrontendMachine-to-Machine, OAuth Exchange

Skenario Praktis - Kapan Memakai Jenis Key Yang Mana?

  1. Peta Interaktif di Website Frontend (Browser): Standard API Key + HTTP Referrer Restriction (domain https://*.domain.com/*).
  2. Login Pengguna di Aplikasi Mobile (Android/iOS): OAuth 2.0 Authorization Code Flow dengan PKCE (tanpa Client Secret statis).
  3. Komunikasi Antarlayanan Microservices Backend: JWT dengan Signature RS256 (Asymmetric Public/Private Key).
  4. Integrasi Payment Gateway: API Secret Key (Server to Server) + Webhook Secret (Verifikasi Callback Notification).
  5. Script Automasi Backup Server ke Cloud Storage: HMAC Request Signing (AWS SigV4) atau Service Account Credentials via SDK.

Kesalahan Umum Keamanan API Key dan Solusinya

  1. Secret Key di Frontend JavaScript: Selalu gunakan Backend Proxy (BFF pattern). Browser memanggil backend milik sendiri, backend yang berkomunikasi dengan API pihak ketiga.
  2. Terkomit ke Git Repository: Pastikan .gitignore memuat .env dan *.json kredensial. Gunakan GitGuardian atau GitHub Secret Scanning. Jika terlanjur terkomit, segera revoke dan rotasi kunci di dashboard provider.
  3. Mengabaikan Verifikasi HMAC Webhook: Selalu baca raw body request dan lakukan perbandingan signature constant-time untuk mencegah spoofing request POST palsu.
  4. Data Sensitif di Payload JWT: Ingat bahwa JWT hanya di-encode Base64Url, bukan dienkripsi. Simpan hanya identifier minimal seperti user_id.
  5. Kunci Tanpa Expired dan Rotasi: Tetapkan masa berlaku pada token dan terapkan prosedur rotasi kunci berkala.

Best Practices Pengelolaan API Key di Produksi

  • Simpan Kredensial di .env / Secrets Vault: Gunakan Environment Variables, AWS Secrets Manager, atau HashiCorp Vault.
  • Prinsip Hak Akses Terkecil (PoLP): Gunakan key terpisah dengan scope minimal (misal read-only).
  • Aktifkan Restriksi Domain & IP: Batasi Public API Key hanya dari domain atau IP server resmi.
  • Wajibkan TLS/HTTPS: Seluruh route API yang membawa token wajib menggunakan HTTPS.
  • Dukung Graceful Key Rotation: Izinkan transisi dua active secret key bersamaan saat rotasi agar aplikasi tidak mengalami downtime.

Kesimpulan & Checklist Sebelum Rilis

API Key bukan sekadar string acak rahasia. Memahami variasi jenis dan mekanismenya adalah fondasi utama membangun aplikasi web yang aman dan andal.

Gunakan checklist singkat ini sebelum meluncurkan integrasi API ke produksi:

  • Seluruh Secret Key disimpan di .env dan tidak ada yang terposting di frontend atau Git.
  • Public API Key di frontend sudah dibatasi dengan HTTP Referrer atau IP restriction.
  • Endpoint Webhook memverifikasi HMAC signature dan timestamp pada setiap request masuk.
  • Payload JWT bebas dari data sensitif dan dikirimkan via HTTPS.
  • Token pihak ketiga dikonfigurasi dengan scope hak akses terkecil (Least Privilege).

Referensi Resmi

Bagikan Artikel:
Diskusi & Komentar

Fitur komentar belum diaktifkan oleh administrator.

Artikel Terkait

Selesai membaca? Kembali ke beranda untuk melihat artikel menarik lainnya.

Kembali ke Beranda