Episode ini membahas autentikasi dasar: directive basicauth, hashing password dengan caddy hash-password, melindungi seluruh situs atau path tertentu, multiple users, serta use case admin panel dan staging environment.

Kadang kalian butuh mengunci sesuatu dengan cepat dan tanpa infrastruktur tambahan: staging environment yang tidak boleh dilihat publik, admin panel kecil, atau dokumen privat. Untuk kebutuhan seperti ini, basic authentication sudah cukup — dan Caddy memilikinya secara bawaan.
Episode 17 membahas directive basicauth: cara membuat hash password dengan caddy hash-password, melindungi seluruh situs atau hanya path tertentu, mendaftarkan beberapa user, serta praktik terbaik saat memakai basic auth.
Ingat: basic auth hanya layak untuk kebutuhan sederhana. Untuk autentikasi enterprise, kita akan membahas forward auth dan SSO di episode 18.
basicauth memakai user dan hash bcrypt:
example.com {
basicauth * {
admin $2y$10$abcdefghijklmnopqrstuv
}
root * /var/www
file_server
}Formatnya: nama user diikuti hash bcrypt. Request yang tidak membawa kredensial valid akan ditolak dengan 401 dan browser menampilkan dialog login.
Jangan pernah menulis password mentah di Caddyfile. Gunakan perintah bawaan:
caddy hash-password --plaintext 'rahasia-saya'Output berupa string $2y$10$... yang bisa langsung dipakai di Caddyfile. caddy hash-password --plaintext '...' menghasilkan hash yang hanya bisa diverifikasi, tidak bisa dibalik.
Daftarkan beberapa user dengan hash masing-masing:
example.com {
basicauth * {
admin $2y$10$hashAdmin
editor $2y$10$hashEditor
viewer $2y$10$hashViewer
}
root * /var/www
file_server
}Setiap user punya hash sendiri. Caddy memverifikasi kredensial terhadap semua entri — siapa pun yang cocok akan diterima. Pemisahan peran (admin, editor, viewer) memudahkan mencabut akses satu user tanpa mengganggu yang lain.
Bintang (*) di awal directive berarti semua path:
example.com {
basicauth * {
admin $2y$10$hash
}
root * /var/www
file_server
}Untuk melindungi hanya sebagian:
example.com {
@admin {
path /admin/*
}
basicauth @admin {
admin $2y$10$hash
}
root * /var/www
file_server
}basicauth @admin hanya mengunci path /admin/* — halaman publik tetap terbuka tanpa login. Ini pola paling umum: situs publik dengan panel admin terproteksi.
Kombinasi matcher untuk zona berbeda:
example.com {
@admin {
path /admin/*
}
@staging {
host staging.example.com
}
basicauth @admin {
admin $2y$10$hashAdmin
}
basicauth @staging {
tester $2y$10$hashTester
}
root * /var/www
file_server
}Zona admin mengunci path /admin/* dengan user admin, zona staging mengunci subdomain dengan user tester. Setiap zona punya kredensial sendiri — isolasi akses yang bersih.
Basic auth mengirim kredensial dalam header Authorization. Tanpa HTTPS, password bisa disadap. Karena Caddy menangani HTTPS otomatis untuk domain publik, pastikan kalian tidak menonaktifkannya.
Basic auth cukup untuk prototipe dan tool internal. Beralih ke forward auth (episode 18) jika kalian butuh:
Pola nyata untuk staging:
staging.example.com {
basicauth * {
developer $2y$10$hashStaging
}
reverse_proxy localhost:8080
}Staging environment yang terproteksi basic auth tidak akan terindeks search engine dan tidak mudah dibobol pengunjung biasa. Kombinasi basicauth * + reverse proxy ini adalah salah satu setup paling sering dipakai developer di dunia nyata.
Episode 17 membekali autentikasi dasar: directive basicauth dengan hash bcrypt, pembuatan hash lewat caddy hash-password, proteksi seluruh situs atau path tertentu dengan matcher, beberapa user dan zona proteksi, serta praktik terbaik dengan HTTPS.
Inti yang harus dibawa pulang:
basicauth memakai hash bcrypt, bukan password mentah.caddy hash-password --plaintext.Di episode 18 selanjutnya kita akan membahas forward authentication & SSO — directive forward_auth, integrasi dengan Authelia, Authentik, OAuth2 Proxy, dan Keycloak, pengiriman header dari respons auth, serta pola global auth dengan snippet. Login terpusat untuk semua aplikasi kalian menanti.