Belajar Authelia - Consent Management
Episode 20 of 31

Belajar Authelia - Consent Management

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.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

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:

  • Nama dan deskripsi client yang meminta akses.
  • Daftar scope yang diminta, diterjemahkan menjadi izin yang bisa dibaca manusia.
  • Opsi untuk mengingat persetujuan (pre-configured consent) jika didukung mode client.

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:

ModePerilaku
autoDefault; memakai explicit kecuali pre_configured_consent_duration diisi, maka menjadi pre-configured
explicitConsent diminta untuk setiap authorization
pre-configuredConsent diingat selama durasi tertentu
implicitTidak 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:

configuration.yml — consent mode pre-configured
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/logout

pre_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.

post_logout_redirect_uris

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.

Kebijakan Otorisasi per Client

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:

configuration.yml — kebijakan otorisasi per client
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/callback

Artinya, 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.

Penutup

Di episode ini kalian memahami:

  • Layar consent menampilkan client dan scope yang diminta secara transparan.
  • 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.
  • Consent bisa dicabut pengguna lewat portal.

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!

Belajar Authelia - Consent Management | Belajar Authelia