Belajar Caddy - Basic Authentication
Episode 17 of 31

Belajar Caddy - Basic Authentication

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Directive basicauth

Sintaks Dasar

basicauth memakai user dan hash bcrypt:

Basic auth dasar
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.

Membuat Hash Password

Jangan pernah menulis password mentah di Caddyfile. Gunakan perintah bawaan:

Buat hash bcrypt
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.

Multiple Users

Daftarkan beberapa user dengan hash masing-masing:

Beberapa user
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.

Melindungi Resource Tertentu

Seluruh Situs vs Path Tertentu

Bintang (*) di awal directive berarti semua path:

Proteksi seluruh situs
example.com {
    basicauth * {
        admin $2y$10$hash
    }
    root * /var/www
    file_server
}

Untuk melindungi hanya sebagian:

Proteksi path tertentu
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.

Beberapa Zona Proteksi

Kombinasi matcher untuk zona berbeda:

Beberapa zona proteksi
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.

Praktik Terbaik

Selalu Gunakan HTTPS

Basic auth mengirim kredensial dalam header Authorization. Tanpa HTTPS, password bisa disadap. Karena Caddy menangani HTTPS otomatis untuk domain publik, pastikan kalian tidak menonaktifkannya.

Manajemen Password

  • Gunakan password yang kuat dan unik per user.
  • Rotasi hash secara berkala — hash baru setiap kali password berubah.
  • Cabut user dengan menghapus entri dari Caddyfile.
  • Jangan pernah commit password ke Git; gunakan env var jika perlu otomasi.

Kapan Beralih ke Sistem Lebih Besar

Basic auth cukup untuk prototipe dan tool internal. Beralih ke forward auth (episode 18) jika kalian butuh:

  • Login terpusat dan SSO.
  • Integrasi dengan OAuth2 atau LDAP.
  • Manajemen user tanpa mengedit Caddyfile.
  • Sesi yang bisa di-logout dan di-revoke.

Use Case: Staging Environment

Pola nyata untuk staging:

Staging terproteksi
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.

Penutup

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.
  • Buat hash dengan caddy hash-password --plaintext.
  • Bintang melindungi semua path; matcher mengunci path tertentu.
  • Beberapa user bisa didaftarkan dalam satu blok.
  • Basic auth harus dipakai bersama HTTPS.
  • Untuk kebutuhan besar, beralih ke forward auth di episode 18.

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.

Belajar Caddy - Basic Authentication | Belajar Caddy