Dua cara menyematkan login beo.gov3.id di aplikasi Anda
Halaman ini memperlihatkan tampilan nyata (bukan gambar) dan snippet siap-salin. Pilih sesuai jenis aplikasi tuan rumah:
| Cara | Cocok untuk | Yang terjadi saat klik / submit |
|---|---|---|
| 1. Tombol Login widget JS |
Aplikasi yang sudah jadi client OIDC/SSO sendiri ke GoTrue gajah: Redmine (redmine_oidc),
Nextcloud (user_oidc), n8n, Open WebUI, dan aplikasi non-phpVB lain. |
Pengguna diarahkan ke endpoint mulai-login milik aplikasi tuan rumah; alur OIDC (PKCE) berjalan seperti biasa. |
| 2. Form Login di-iframe pola portal phpVB |
Portal gov2/gov3 berbasis phpVB (kontrak session_send + resolver cmd=authorize) —
sama persis dengan halaman login portal sandbox. |
Form beo tampil di dalam halaman portal; setelah login, beo mengirim token sesi ke portal (redirect.html) dan portal me-mint Gov2Session. |
| 3. Integrasi client OIDC prasyarat cara 1 |
Aplikasi yang belum terhubung ke SSO Gov3: cara mendaftarkan aplikasi sebagai client OIDC di GoTrue gajah, nilai konfigurasi yang dipakai, dan kebijakan pemetaan akun. | Setelah terdaftar, aplikasi menjalankan alur OIDC standar (authorization code + PKCE); beo menyediakan halaman login dan persetujuan. |
Tampilan langsung
Kartu di atas dirender oleh login-button.v1.js di Shadow DOM — gaya
halaman ini tidak memengaruhinya, dan sebaliknya. Tampilan identik dengan kartu di halaman login Redmine (#11053).
Panduan pasang
data-href dengan endpoint mulai-login aplikasi Anda — bukan URL beo.
Widget hanya tampilan + tautan; aplikasi Anda tetap client OIDC sendiri (PKCE, redirect_uri terdaftar di GoTrue).<div data-beo-login
data-href="/oidc/authorize"
data-label="Login dengan BEO.gov3.id"
data-hint="Jika Anda telah memiliki akun SSO Government 3.0 (beo.gov3.id) maka Anda bisa gunakan untuk login"></div>
<script src="https://beo.gov3.id/gov2sso/js/login-button.v1.js" async></script>
Nilai data-href per aplikasi
| Aplikasi | data-href | Catatan |
|---|---|---|
Redmine (redmine_oidc) | /oidc/authorize | Sudah dipakai di redmine.cybergl.co.id lewat partial plugin; widget ini tampilannya sama. |
Nextcloud (user_oidc) | /apps/user_oidc/login/1 | Angka = id provider di pengaturan user_oidc. CSP Nextcloud ketat → biasanya perlu self-host skrip (lihat catatan). |
| n8n | sesuai fitur SSO edisi terpasang | Pastikan dulu login OIDC tersedia di edisi n8n yang dipakai. |
| Portal phpVB | /gov2login | Halaman login portal yang memuat form beo di-iframe — lihat bagian 2. |
| Open WebUI | /oauth/oidc/login | Konsumen OIDC GoTrue; layar persetujuan di /gov2sso/consent. |
Atribut
| Atribut | Wajib | Default | Keterangan |
|---|---|---|---|
data-href | ya | — | Tujuan tombol. Hanya path relatif atau URL https:; nilai lain (mis. javascript:) ditolak dan widget tidak dirender. |
data-label | tidak | Login dengan BEO.gov3.id | Teks tombol. |
data-hint | tidak | kalimat "Jika Anda telah memiliki akun SSO…" | Keterangan kecil di bawah tombol. Beri nilai kosong (data-hint="") untuk menyembunyikan. |
data-width | tidak | 340px | Lebar maksimum kartu — samakan dengan box login tuan rumah (angka = px). |
data-color | tidak | #5b4fb9 | Warna tombol (primary tema beo). |
data-brand | tidak | #a4a5d5 | Warna pita logo (sama dengan header login beo). |
data-target | tidak | _self | Isi _top bila widget dipasang di dalam iframe agar login terjadi di jendela utama. |
data-logo | tidak | — | none = tanpa pita logo (tombol + keterangan saja). |
Catatan
beo.gov3.id (Nextcloud), unduh
login-button.v1.js dan sajikan dari aset aplikasi
sendiri. Logo sudah ter-embed di dalam JS, jadi tidak ada request lain ke beo.v1). Perubahan tampilan yang tidak kompatibel akan dirilis
sebagai v2, sehingga tuan rumah yang sudah memasang tidak berubah tiba-tiba.BeoLoginWidget.render().textContent (bukan innerHTML); widget tidak membaca cookie, token, atau localStorage.Tampilan langsung
Yang Anda lihat adalah form login beo asli yang sedang di-iframe oleh halaman ini — sama dengan yang tampil di halaman login portal sandbox. Tinggi iframe mengikuti isi (iframeResizer).
Panduan pasang
<platform><ssonode>https://beo.gov3.id</ssonode></platform>
di config.{stage}.xml. App gov2login bawaan framework sudah memuat iframe ini di
/gov2login dan menangani token balik (resolver). Tidak perlu menyalin snippet.redirect.html berisi token lalu memanggil https://beo.gov3.id/slogin.php?cmd=authorize&token=…
dari sisi server, dan domainnya terdaftar di Registry Portal. Bila tidak, gunakan cara 1 (OIDC).<!-- form login beo; client = domain portal Anda (harus terdaftar di Registry Portal) -->
<iframe class="beo-auth-frame"
src="https://beo.gov3.id/slogin.php?client=PORTAL.ANDA.go.id"
style="width:100%;height:560px;border:0;display:block"
referrerpolicy="unsafe-url"></iframe>
<!-- tinggi iframe mengikuti isi: beo sudah memuat iframeResizer.contentWindow (anak) -->
<script src="/js/iframeResizer.min.js"></script>
<script>
iFrameResize({ log: false, enablePublicMethods: true }, '.beo-auth-frame');
</script>
Halaman beo lain yang bisa di-iframe dengan cara sama
| Fungsi | URL (?client= domain portal) | Tinggi awal |
|---|---|---|
| Login | https://beo.gov3.id/slogin.php?client=… | 560px |
| Daftar akun | https://beo.gov3.id/gov2sso/signup?client=… | 640px |
| Lupa kata sandi | https://beo.gov3.id/gov2sso/spassword?client=… | 520px |
| Aktivasi | https://beo.gov3.id/gov2sso/signup?cmd=activation&client=… | 520px |
Catatan
client_id= (id registry) diterima menggantikan client=.referrerpolicy="unsafe-url" dipertahankan supaya beo mengetahui halaman pemanggil secara utuh.target="_top" —
Google menolak dibuka di dalam iframe..saas-frame (overflow:hidden + rasio persegi)
— form terpotong di mobile. Versi iframeResizer.min.js induk harus cocok dengan skrip anak di beo
(framework phpVB: public/js/iframeResizer.min.js).stoken (profil portal gov2login).Tombol pada bagian 1 hanya berguna bila aplikasi Anda sudah menjadi client OpenID Connect ke penyedia identitas Gov3. Penyedianya adalah GoTrue di gajah; beo menyediakan halaman login dan halaman persetujuan (consent) yang dilihat pengguna. Aplikasi Anda tidak pernah menerima kata sandi pengguna, hanya token.
Nilai konfigurasi penyedia
| Issuer | https://gajah.gov3.id/auth/v1 |
|---|---|
| Discovery | https://gajah.gov3.id/auth/v1/.well-known/openid-configurationendpoint authorize/token/userinfo/jwks diambil dari sini, jangan di-hardcode |
| Scope | openid email profile |
| Alur | Authorization Code + PKCE S256; client confidential (client_secret_basic) |
| Klaim yang dipakai | sub, email, email_verified, name |
| Halaman persetujuan | https://beo.gov3.id/gov2sso/consent (otomatis dari authorize; label klien = host redirect_uri) |
| Redirect URI | Harus persis sama dengan yang didaftarkan (skema, host, path, termasuk index.php bila aplikasi memakainya) |
Langkah pendaftaran client
https://HOST/oidc/callback, Nextcloud
https://HOST/index.php/apps/user_oidc/code, oauth2-proxy https://HOST/oauth2/callback.client_id + client_secret diterima lewat vault (pointer path di tiket, bukan nilai).
Jangan tempel secret di tiket, chat, atau repo.data-href = endpoint mulai-login aplikasi.Kebijakan pemetaan akun (pelajaran dari lebah & kambing)
email
(bukan sub yang di-hash). Email beo tepercaya: pendaftaran mewajibkan konfirmasi
(email_verified ada di klaim).must_change_passwd).
Kata sandi lokal hanya untuk admin darurat dan akun layanan (API key, app-password WebDAV).Rujukan implementasi yang sudah jalan
| Aplikasi | Cara | Rujukan |
|---|---|---|
| Redmine lebah | plugin redmine_oidc (PKCE, pencocokan email, email_verified) | #6333, #11052, #11053 |
| Nextcloud kambing | app user_oidc, soft provisioning tanpa pembuatan akun, uid = klaim email | #6332 |
| Open WebUI | OIDC bawaan, konsumen pertama GoTrue gajah | #6328 |
| n8n gurita (tanpa SSO native) | oauth2-proxy + bridge: verifikasi ke beo saat login, sesi di-forge, allowlist anggota proyek | #11055, wiki gurita Gerbang_Login_BEO |
| Portal phpVB | bukan OIDC: kontrak session_send (bagian 2) | #6161 |