Membongkar alur autentikasi Authentik: identification stage untuk mencari user, password stage untuk validasi kredensial, authenticator validate stage untuk verifikasi MFA, ragam metode TOTP, WebAuthn, dan static OTP, serta alur enrollment dan recovery perangkat.

Di episode 6, kalian belajar membuat policy — termasuk pola yang memaksa sebagian user melewati MFA. Sekarang saatnya membuka bagian dalam mesin: bagaimana alur autentikasi benar-benar bekerja, dan bagaimana lapisan kedua keamanan itu dijalankan oleh Authentik.
Bayangkan sebuah gedung dengan dua pintu berlapis. Pintu pertama mengunci dengan password — siapa pun yang hafal kombinasi bisa masuk. Pintu kedua baru terbuka jika kalian juga membawa kartu akses khusus. Satu kunci saja tidak cukup; kombinasi itulah yang disebut Multi-Factor Authentication. Di episode ini kalian akan memprogram kedua pintu itu, mulai dari identification stage sampai authenticator validate stage.
Secara umum, alur login di Authentik berjalan melalui tiga tahap yang diwakili tiga jenis stage:
Urutan ini bukan aturan kaku — Authentik membiarkan kalian menyusun ulang dan menambahkan stage lain — tapi ini pola default yang masuk akal. Tiap tahap menjawab pertanyaan yang berbeda: "kamu siapa", "apa bukti kamu tahu", dan "apa bukti kamu punya".
Identification stage menjawab pertanyaan pertama. Stage ini menampilkan formulir login, lalu mencari user berdasarkan username atau email. Beberapa perilaku yang bisa dikonfigurasi:
Hasil pencarian ini disimpan sebagai user yang sedang diproses, sering disebut pending_user, di dalam flow context — data yang nanti dibaca oleh stage berikutnya dan oleh policy seperti yang kalian pelajari di episode 6.
Password stage memvalidasi password terhadap authentication backend yang sudah disetel: database user internal Authentik, atau source LDAP jika kalian memakai federasi. Beberapa hal yang bisa diatur:
Perlu dicatat: password stage hanya memvalidasi "apa yang kamu tahu". Ia tidak menjamin keamanan jika password sudah bocor — itulah mengapa pintu kedua diperlukan.
Inilah pintu kedua. Authenticator validate stage memeriksa apakah user memiliki perangkat MFA yang sudah terdaftar, lalu memintanya melakukan verifikasi. Yang menarik, stage ini bersifat kondisional: ia hanya berjalan jika policy yang di-bind ke stage binding tersebut lulus. Dari sinilah pola "MFA wajib untuk admin" di episode 6 bekerja.
Authentik mendukung beberapa jenis authenticator yang bisa didaftarkan user:
Important
Mewajibkan MFA tanpa menyediakan backup codes adalah kelalaian yang mahal. Selalu minta user mendaftarkan static OTP saat enrollment — saat ponsel hilang atau aplikasi authenticator terhapus, static token adalah satu-satunya jalan pulang sebelum user mendaftarkan perangkat baru.
Ada situasi di mana kalian ingin memberi user pilihan: "login dengan password ATAU passkey", atau "verifikasi dengan TOTP ATAU backup code". Inilah fungsi duplicate stage.
Duplicate stage menandai langkah yang sudah berhasil diselesaikan. Jika dalam satu alur ada beberapa stage yang ditandai sebagai duplikat satu sama lain, begitu salah satu selesai, sisanya dilewati otomatis. Analoginya seperti gerbang stasiun: setelah tiket kalian divalidasi di satu pintu, pintu antrean lain tidak perlu dilalui lagi.
Ini juga pola kunci untuk passwordless: jalankan duplicate stage WebAuthn di samping password stage, sehingga user dengan passkey bisa masuk tanpa mengetik password sama sekali.
MFA tidak berguna jika user tidak punya cara mendaftarkan perangkat. Di sinilah peran stage setup dan flow pendukung:
authenticator-totp-setup, authenticator-webauthn-setup, dan authenticator-static-setup. Setiap stage menampilkan instruksi, memvalidasi perangkat, lalu menyimpannya ke user.default-enrollment-flow), stage setup MFA ditambahkan di akhir sehingga perangkat pertama langsung terdaftar.default-recovery-flow digunakan saat user lupa password atau kehilangan perangkat. Alur ini biasanya memverifikasi email atau kode cadangan sebelum mengizinkan pengaturan perangkat baru.Warning
Recovery flow adalah jalan pintas menuju akun. Pastikan ia memakai verifikasi yang lebih kuat daripada sekadar tahu email: misalnya email plus jawaban pertanyaan, atau token yang dikirim khusus. Jangan biarkan penyerang memanfaatkan alur recovery untuk menguasai akun orang lain.
Cara paling umum mengaktifkan MFA adalah mengikat policy ke stage binding authenticator validate di dalam authentication flow. Contohnya: wajibkan MFA hanya untuk anggota grup admins.
if ak_is_group_member(request.user, name="admins"):
return True
return FalsePolicy ini di-bind ke stage binding authenticator validate. Hasilnya: anggota grup admins melewati pintu kedua, user biasa langsung masuk setelah password. Perhatikan cara kerjanya — policy yang gagal membuat stage dilewati, bukan membuat login berhenti. Untuk memaksa MFA, stage validation memang harus menjadi stage yang lolos hanya jika perangkat diverifikasi.
Pola kedua yang sering dipakai adalah hanya menjalankan stage setup ketika user belum punya perangkat sama sekali — misalnya dalam enrollment flow.
return not ak_user_has_authenticator(request.user)Tip
Kombinasikan policy dari episode 6 dengan pengetahuan stage ini: kalian bisa mewajibkan MFA untuk aplikasi tertentu (via policy yang memeriksa application context), untuk jaringan tertentu, atau hanya di luar jam kerja. Semua conditional logic yang sama berlaku untuk pintu kedua.
Poin kunci episode ini:
Sekarang kedua pintu gedung sudah terprogram: identitas sudah terverifikasi, dan MFA mengamankan yang paling penting. Tinggal satu pertanyaan tersisa — bagaimana aplikasi di luar sana bisa ikut memanfaatkan semua ini? Di episode 8, kalian akan membuka pintu ketiga: membuat OAuth2 dan OIDC provider di Authentik agar aplikasi eksternal bisa login dengan standar industri.