Membedah arsitektur Authelia: server Go, configuration.yml, session storage Redis, user database, storage backend, dan notifier, lalu mengikuti alur autentikasi end-to-end dari request browser hingga cookie session dan istilah kunci seperti access control dan policy.

Setelah di episode 1 kita memahami mengapa Authelia dibutuhkan — satu pintu masuk untuk banyak aplikasi — pada episode kali ini kita membedah bagaimana Authelia bekerja di balik layar. Ini episode paling penting untuk dipahami sebelum menyentuh konfigurasi: tanpa arsitektur, semua sintaks configuration.yml hanyalah hafalan yang mudah salah terpakai.
Kita akan memetakan komponen-komponen arsitektur, memahami konsep inti (portal, access control, 1FA vs 2FA, session), lalu mengikuti perjalanan satu permintaan HTTP dari browser hingga kembali membawa cookie session. Seperti pilot yang wajib paham bagaimana sayap bekerja sebelum terbang, engineer yang memahami arsitektur Authelia akan jauh lebih cepat men-debug masalah di episode-episode berikutnya.
Authelia tidak pernah berjalan sendirian. Ia adalah satu titik koordinasi di antara lima komponen lain. Mari bedah satu per satu.
Jantungnya adalah binary Authelia yang ditulis dalam Go. Ia melayani dua hal: endpoint verifikasi (yang dipanggil reverse proxy untuk menilai setiap permintaan) dan portal login (antarmuka tempat pengguna masuk). Secara default ia mendengarkan di port 9091. Server ini "tanpa keadaan" (stateless) untuk urusan session — semua session disimpan di Redis, sehingga nanti mudah diskalakan secara horizontal di episode high availability.
Semua perilaku Authelia ditentukan oleh satu file: configuration.yml. Dari sini Authelia tahu di mana pengguna disimpan, di mana session disimpan, bagaimana mengirim notifikasi, dan aturan akses apa yang berlaku. Kita akan membedah file ini secara menyeluruh di episode 4.
Keadaan login (session) disimpan secara terpusat — biasanya di Redis. Mengapa tidak di dalam Authelia sendiri? Karena dengan Redis, session bisa dibagikan antar beberapa instance Authelia, dan session bisa di-revoke secara terpusat. Untuk development, Authelia juga mendukung session di memori (in-memory), tapi Redis adalah rekomendasi production. Episode 7 akan membahas session secara tuntas.
Sumber kebenaran untuk akun pengguna. Authelia tidak memaksa format tertentu — ia mendukung file YAML (users_database.yml) untuk skala kecil, serta LDAP dan Active Directory untuk organisasi. Ini disebut authentication backend, dan episode 5 akan membahas ketiganya secara mendalam.
Berbeda dari database pengguna, storage backend menyimpan data yang dihasilkan Authelia itu sendiri: secret TOTP, kredensial WebAuthn, token verifikasi identitas, dan catatan consent OIDC. Opsinya: SQLite lokal (default, paling sederhana), PostgreSQL, atau MySQL/MariaDB. Episode 8 membahasnya.
Authelia perlu mengirim email — misalnya kode verifikasi untuk reset password atau konfirmasi pendaftaran perangkat. Dua opsi: SMTP untuk produksi, dan filesystem (menulis "email" ke file lokal) untuk laboratorium. Episode 12 membahas konfigurasi SMTP.
Beberapa istilah akan kalian temui terus-menerus di seluruh series ini. Pahami sekarang agar tidak tersesat nanti:
auth.example.com). Ini satu-satunya pintu masuk untuk semua aplikasi yang dilindungi.grafana.example.com. Semua permintaan ke domain ini harus lulus verifikasi Authelia.bypass, one_factor, two_factor, atau deny.Inilah momen "semuanya menyatu". Ikuti perjalanan satu permintaan:
https://grafana.example.com di browser.https://auth.example.com.https://grafana.example.com — kini membawa cookie session.Remote-User, Remote-Groups).Browser Proxy (NGINX) Authelia Redis
| 1. GET / (no cookie) | | |
|--------------------------->| 2. verify? | |
| |--------------------->| 3. cek session |
| | |------------------>|
| | | 4. tidak ada |
| |<---------------------|<------------------|
| 5. redirect ke portal | | |
|<---------------------------| | |
| 6. POST username+pass | | |
|--------------------------------------------------->| 7. validasi user |
| | | 8. buat session |
| | |------------------>|
| 9. set cookie + redirect | | |
|<---------------------------| | |
| 10. GET / (dengan cookie) | | |
|--------------------------->| 11. verify? | |
| |--------------------->| 12. session sah |
| | |------------------>|
| |<---------------------|<------------------|
| 13. GET / + Remote-User | | |
|<---------------------------| 14. response Grafana | |Important
Perhatikan bahwa aplikasi (Grafana) tidak pernah melihat password pengguna dan tidak pernah berbicara langsung dengan Authelia. Semua keputusan autentikasi terjadi antara proxy dan Authelia; aplikasi hanya menerima header identitas. Inilah pola forward authentication: aplikasi tetap polos, keamanan terpusat.
Authelia dibangun di atas prinsip defense in depth — beberapa lapis pertahanan, bukan satu pagar:
deny), hanya dibuka lewat aturan eksplisit.Pada episode 2 ini kalian telah memetakan arsitektur Authelia: server Go sebagai koordinator, configuration.yml sebagai otak, Redis untuk session, authentication backend (file/LDAP/AD) untuk akun pengguna, storage backend (SQLite/PostgreSQL/MySQL) untuk data MFA, dan notifier untuk email. Kalian juga mengikuti alur lengkap satu permintaan: dari browser, ke proxy, ke verifikasi Authelia, ke portal, kembali dengan cookie session, hingga aplikasi menerima header identitas.
Poin yang harus kalian bawa:
deny.Di episode 3 selanjutnya kita akan mulai beraksi: memasang Authelia dengan Docker Compose — menyusun stack Authelia + Redis + database, membuat file konfigurasi minimal, mengelola secret lewat file .env, dan memverifikasi portal Authelia pertama kalian. Sampai jumpa di episode 3!