Mengintegrasikan aplikasi nyata seperti Grafana, Nextcloud, Portainer, dan Gitea dengan OIDC Authentik, walkthrough alur login, verifikasi token dengan jwt.io, serta troubleshooting error umum seperti redirect mismatch dan masalah scope.

Di episode 9, isi token sudah sepenuhnya di tangan kalian lewat property mappings. Sekarang saatnya ujian sesungguhnya: menyambungkan aplikasi sungguhan. Grafana, Nextcloud, Portainer, Gitea — semua mendukung OIDC, dan semuanya bisa memakai Authentik sebagai satu gerbang login.
Triknya adalah mengenali polanya. Setiap aplikasi memiliki titik konfigurasi yang berbeda, tapi parameter yang diminta selalu sama: discovery URL atau endpoint, client ID, client secret, redirect URI, dan scope. Kalian sudah punya semua bahan itu dari episode 8 dan 9. Yang tersisa hanyalah menerjemahkannya ke bahasa konfigurasi masing-masing aplikasi.
Sebelum menyentuh aplikasi, pastikan empat hal ini siap:
openid profile email, tambahkan offline_access jika aplikasi butuh refresh token.Redirect URI adalah kontrak antara aplikasi dan Authentik: kedua sisi harus menulis nilai yang sama persis.
Grafana mendukung OIDC lewat modul generic OAuth. Pertama, buat provider OAuth2 di Authentik dengan redirect URI https://grafana.example.com/login/generic_oauth. Lalu tambahkan konfigurasi di file grafana.ini.
[auth.generic_oauth]
enabled = true
name = Authentik
allow_sign_up = true
client_id = <client-id>
client_secret = <client-secret>
scopes = openid profile email
auth_url = https://auth.example.com/application/o/authorize/
token_url = https://auth.example.com/application/o/token/
api_url = https://auth.example.com/application/o/userinfo/allow_sign_up membuat user baru otomatis dibuat saat login pertama — nyaman untuk homelab. Untuk kontrol peran, kalian bisa memetakan grup dari claim groups (yang dibentuk di episode 9) ke peran Grafana, misalnya Viewer dan Admin.
Nextcloud memakai aplikasi user_oidc resmi. Setelah menginstalnya, masuk ke Settings > OpenID Connect clients dan daftarkan Authentik dengan:
https://auth.example.com/application/o/nextcloud/.well-known/openid-configurationhttps://nextcloud.example.com/apps/user_oidc/codeAutodiscovery membuat Nextcloud membaca semua endpoint dan kunci JWKS langsung dari Authentik — keunggulan besar dibanding konfigurasi manual, karena perubahan signing key di provider tidak perlu diterjemahkan ulang.
Portainer dikonfigurasi lewat UI-nya: Settings > Authentication, lalu aktifkan OAuth. Yang diminta hanyalah URL endpoint dan kredensial klien — tidak ada file konfigurasi untuk diedit:
https://auth.example.com/application/o/authorize/https://auth.example.com/application/o/token/https://auth.example.com/application/o/userinfo/https://portainer.example.com (ditampilkan oleh Portainer saat konfigurasi).Aktifkan Autoprovisioning agar user yang login lewat Authentik otomatis dibuat akunnya. Tanpa ini, user harus dibuat manual terlebih dahulu.
Gitea menyediakan OAuth2 sources lewat Site Administration > Authentication Sources. Pilih provider OpenID Connect, lalu isi:
https://auth.example.com/application/o/gitea/.well-known/openid-configurationhttps://gitea.example.com/user/oauth2/<nama-source>/callbackUntuk referensi, konfigurasi yang sama bisa direpresentasikan di app.ini:
[oauth2_client.1]
NAME = Authentik
PROVIDER = openidConnect
CLIENT_ID = <client-id>
CLIENT_SECRET = <client-secret>
AUTO_DISCOVERY_URL = https://auth.example.com/application/o/gitea/.well-known/openid-configurationTip
Selalu mulai dengan discovery URL daripada menyalin endpoint manual. Ia otomatis memuat endpoint authorize, token, userinfo, dan JWKS. Jika Authentik berubah atau issuer mode disetel ulang, aplikasi dengan autodiscovery akan tetap sinkron.
Saat semua aplikasi terkonfigurasi, alur SSO yang kalian lihat akan persis seperti ini:
authorize Authentik.code.code di endpoint token memakai client credentials.Dari sudut pandang user, login adalah satu pintu yang sama untuk semua aplikasi. Dari sudut pandang admin, satu akun dan satu set policy mengontrol semuanya.
Sesudah login pertama berhasil, verifikasi apa yang sebenarnya dikirim aplikasi. Tempel ID token ke jwt.io — alat ini mendecode header, payload, dan tanda tangan. Yang perlu diperiksa:
iss: issuer sesuai aplikasi.aud: berisi client id aplikasi.exp: masa berlaku masuk akal.email, groups, atau claim kustom yang kalian buat.Tanpa membuka browser, kalian bisa mendecode token lewat baris perintah:
echo "<id-token>" | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null | jq .Important
jq dan base64 di sini hanya untuk mengintip isi token — bukan verifikasi keaslian. Untuk memverifikasi tanda tangan, gunakan kunci publik dari JWKS endpoint. Menerima token hanya karena payloadnya terbaca adalah kebiasaan yang berbahaya.
Bahkan dengan konfigurasi benar, ada beberapa error yang selalu muncul berulang. Kenali polanya:
signing key (bukan HMAC) dipilih di provider.email_verified seperti di episode 9, atau verifikasi email user.Warning
Saat mengecek masalah integrasi, buka log Authentik dan log aplikasi secara berdampingan. Kesalahan biasanya muncul dua kali: sekali dari sisi aplikasi (parameter yang dikirim), sekali dari sisi Authentik (parameter yang ditolak). Mencocokkan keduanya mempercepat diagnosis drastis.
Poin kunci episode ini:
grafana.ini, Nextcloud lewat aplikasi user_oidc, Portainer lewat UI, Gitea lewat authentication sources.base64/jq untuk mengintip isi token; JWKS untuk memverifikasi tanda tangan.Semua aplikasi modern kini login lewat satu pintu. Tapi bagaimana dengan aplikasi yang tidak mendukung OIDC sama sekali — tools lama yang hanya menerima reverse proxy biasa? Di episode 11, kalian akan mengenal proxy provider dan outpost, senjata Authentik untuk membungkus aplikasi apa pun dengan autentikasi, tanpa mengubah kode satu baris pun.