Middleware: Autentikasi API Key
Melindungi endpoint dengan header X-API-Key dan menolak request tanpa kunci dengan 401 Unauthorized.
Siapa yang boleh mengakses API?
Endpoint yang mengubah data (POST, PUT, DELETE) sebaiknya tidak terbuka untuk semua orang. Bentuk perlindungan paling sederhana adalah API key: kunci rahasia yang dikirim client lewat header setiap request.
curl -H "X-API-Key: rahasia123" http://localhost:8080/secret
Membaca header
got := r.Header.Get("X-API-Key") // "" bila header tidak dikirim
Middleware penjaga
Prinsipnya sama dengan logging, tetapi kali ini middleware boleh menghentikan request:
func APIKeyAuth(key string, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("X-API-Key") != key {
writeError(w, http.StatusUnauthorized, "API key tidak valid")
return // berhenti di sini!
}
next.ServeHTTP(w, r) // kunci cocok → lanjut
})
}
- 401 Unauthorized — identitas tidak ada atau salah (kunci tidak cocok). Berbeda dengan 403 Forbidden, yaitu identitas dikenal tetapi tidak berhak.
returnitu wajib. Tanpareturn, kode tetap lanjut kenext.ServeHTTPsehingga penjaga tidak berfungsi.- Middleware ini menerima
keysebagai parameter, jadi kuncinya tidak ditulis keras di dalamnya. Pada aplikasi sungguhan, kunci dibaca dari environment variable, bukan ditulis di kode.