Episode ini mengatur persetujuan pengguna pada OIDC: layar consent yang menampilkan izin yang diminta client, mode consent per client seperti pre-configured dan implicit, prompt consent, post logout redirect, hingga pencabutan izin yang sudah diberikan.

Di episode 19 kalian berhasil mengintegrasikan Grafana, Gitea atau Forgejo, Nextcloud, dan Portainer. Saat login pertama kali, pasti ada sebuah layar yang menanyakan izin: aplikasi mana yang meminta akses, dan scope apa saja yang diminta. Itulah layar consent, dan episode 20 ini membahas cara mengelolanya.
Consent adalah persetujuan pengguna terhadap permintaan sebuah aplikasi untuk membaca data identitasnya. Konsep ini mirip izin aplikasi ponsel: aplikasi kamera tidak otomatis boleh membaca kontak hanya karena kalian menginstalnya. Di dunia identitas, consent menjadi jembatan antara kemudahan SSO dan kontrol pengguna atas datanya sendiri.
Saat client mengarahkan pengguna ke Authelia untuk pertama kalinya, Authelia menampilkan layar consent yang berisi:
Pengguna tidak ditanya "berikan semua data" — ia ditanya secara spesifik, misalnya "aplikasi ingin melihat nama dan alamat surel kalian". Transparansi ini membuat pengguna bisa menolak aplikasi yang meminta terlalu banyak.
Kebijakan consent diatur per client lewat consent_mode. Empat nilainya:
| Mode | Perilaku |
|---|---|
auto | Default; memakai explicit kecuali pre_configured_consent_duration diisi, maka menjadi pre-configured |
explicit | Consent diminta untuk setiap authorization |
pre-configured | Consent diingat selama durasi tertentu |
implicit | Tidak pernah bertanya (tidak sepenuhnya sesuai spesifikasi) |
Warning
Mode implicit tidak sepenuhnya sesuai spesifikasi OpenID Connect dan tidak disarankan untuk public client — client tanpa secret yang aman. Untuk public client, selalu pertimbangkan explicit atau pre-configured.
Contoh client dengan consent pre-configured selama tiga bulan:
identity_providers:
oidc:
clients:
- id: client-b
description: Aplikasi internal
secret: '$plaintext$rahasia-client'
consent_mode: pre-configured
pre_configured_consent_duration: 3 months
redirect_uris:
- https://b.example.com/callback
post_logout_redirect_uris:
- https://b.example.com/logoutpre_configured_consent_duration menentukan berapa lama pilihan "ingat persetujuan" bertahan. Consent pre-configured hanya berlaku jika subjek, client, scope, dan audience yang diminta sama persis dengan yang sudah disetujui. Ubah scope sedikit saja, dan layar consent muncul lagi.
Client bisa memaksa layar consent selalu tampil dengan mengirim parameter prompt=consent pada authorization request. Sebaliknya, prompt=none melarang semua interaksi — berguna untuk pemeriksaan sesi di latar belakang. Perlu diingat:
prompt=none tidak valid jika dipasangkan dengan consent explicit.prompt=consent tidak valid pada client dengan consent implicit.Tip
Gunakan prompt=none untuk validasi session secara senyap, misalnya saat halaman aplikasi ingin tahu apakah pengguna masih login tanpa memunculkan layar baru.
Ketika pengguna logout dari aplikasi, aplikasi bisa mengarahkannya kembali ke Authelia untuk memutus session SSO, lalu kembali ke halaman yang aman. Daftar tujuan yang diperbolehkan dideklarasikan di post_logout_redirect_uris. Authelia hanya meneruskan ke URI yang terdaftar — mencegah redirect terbuka yang bisa disalahgunakan untuk phishing.
Selain consent, Authelia punya authorization_policy per client untuk menentukan metode autentikasi sebelum flow OIDC berjalan. Untuk kebijakan yang kompleks, definisikan authorization_policies lalu rujuk namanya:
identity_providers:
oidc:
authorization_policies:
dua-faktor:
default_policy: two_factor
rules:
- policy: deny
subject: 'group:blocked'
clients:
- id: client-c
description: Dasbor internal
secret: '$plaintext$rahasia-client'
authorization_policy: dua-faktor
redirect_uris:
- https://c.example.com/callbackArtinya, client client-c mengharuskan dua faktor untuk semua orang kecuali anggota grup blocked, yang langsung ditolak. Consent dan otorisasi bekerja berlapis — consent menjawab "boleh aplikasi ini membaca data?" sementara authorization policy menjawab "apakah pengguna ini layak sampai di sini?".
Consent yang sudah diberikan tidak permanen. Pengguna bisa melihat dan mencabut izinnya lewat portal Authelia, pada bagian aktivitas dan sesi. Setelah dicabut, authorization berikutnya akan menampilkan layar consent lagi, dan aplikasi harus meminta ulang.
Perlu dicatat: mencabut consent tidak serta-merta menghancurkan token yang sudah terbit. Token tetap berlaku sampai kedaluwarsa. Jika kalian perlu memutus akses seketika — misalnya karena perangkat hilang — putuskan session di Authelia dan cabut consent-nya sekaligus.
Di episode ini kalian memahami:
consent_mode mengatur perilaku consent per client: auto, explicit, pre-configured, dan implicit.prompt=consent dan prompt=none mengendalikan kapan layar consent muncul.post_logout_redirect_uris membatasi tujuan setelah logout.authorization_policy memisahkan kebijakan otorisasi dari consent.Sekarang kita siap menghadapi musuh yang sesungguhnya. Di episode 21, kita membahas Brute Force Protection (Regulation) — bagaimana Authelia memblokir percobaan login berulang dan cara menyesuaikannya tanpa menjebak pengguna sah. Sampai jumpa!