Apa Itu Single Sign-On?
Single Sign-On (SSO) adalah mekanisme otentikasi yang memungkinkan pengguna memasuki beberapa aplikasi atau layanan hanya dengan satu kali masuk. Dengan SSO, kredensial pengguna disimpan secara terpusat, mengurangi beban mengingat banyak username dan password serta meningkatkan keamanan karena pengguna tidak lagi menuliskan kata sandi secara berulangulang.
Kenapa Menggunakan LDAP untuk SSO?
LDAP (Lightweight Directory Access Protocol) adalah protokol standar untuk mengakses dan mengelola layanan direktori. Direktori LDAP biasanya menyimpan data pengguna, grup, hak akses, dan atribut lain yang diperlukan untuk otentikasi. Menggunakan LDAP sebagai sumber autentikasi pada SSO memiliki beberapa keunggulan:
- Terpusat: Semua data pengguna berada di satu tempat.
- Skalabilitas: LDAP dirancang untuk menangani ribuan hingga juta pengguna.
- Keamanan: Dukungan TLS/SSL, bind anonim, dan kontrol akses granular.
- Kompatibilitas: Banyak aplikasi mendukung LDAP secara native atau melalui plugin.
Arsitektur Dasar Integrasi SSOLDAP
Berikut alur umum integrasi SSO dengan LDAP:
- Pengguna mengakses aplikasi klien.
- Aplikasi mengarahkan ke Identity Provider (IdP) SSO.
- IdP meminta kredensial atau melakukan redirect ke halaman login LDAP.
- IdP melakukan bind ke server LDAP dengan service account untuk mencari DN (Distinguished Name) pengguna.
- Jika password cocok, IdP menghasilkan token (misalnya SAML Assertion atau JWT) dan mengirimkan kembali ke aplikasi klien.
- Aplikasi memvalidasi token dan memberikan akses sesuai peran yang didapat dari LDAP.
Diagram singkat dapat digambarkan sebagai:
[User] [Application] [IdP (SSO)] [LDAP Server]
LangkahLangkah Implementasi
1. Persiapan Server LDAP
- Pastikan LDAP (mis. OpenLDAP, Microsoft AD) dapat diakses melalui jaringan aplikasi.
- Aktifkan TLS/SSL (ldaps://) untuk melindungi transmisi kredensial.
- Buat akun service (mis.
cn=ssobind,ou=ServiceAccounts,dc=example,dc=com) dengan hak pencarian readonly pada OU yang berisi pengguna. - Pastikan skema LDAP berisi atribut
uidatausAMAccountNamesertauserPasswordatau atribut password hash yang didukung.
2. Konfigurasi Identity Provider
Berikut contoh konfigurasi IdP berbasis Keycloak yang menggunakan LDAP sebagai User Federation:
# Pada Keycloak Admin ConsoleIdentity Providers LDAP- Vendor: Other- Connection URL: ldaps://ldap.example.com:636- Bind DN: cn=ssobind,ou=ServiceAccounts,dc=example,dc=com- Bind Credential: ********- User DN: ou=People,dc=example,dc=com- Username LDAP attribute: uid- RDN LDAP attribute: uid- UUID LDAP attribute: entryUUID- Use Truststore SPI: ldaps-only- Import Users: ON- Search Scope: SUBTREE
Setelah menyimpan, lakukan Sync Users untuk memuat data ke Keycloak.
3. Pilih Protokol SSO
Anda dapat memakai SAML 2.0 atau OpenID Connect (OIDC). Contoh konfigurasi OIDC pada Keycloak:
Clients Create- Client ID: myapp- Client Protocol: openid-connect- Access Type: confidential- Valid Redirect URIs: https://myapp.example.com/*- Web Origins: https://myapp.example.com
4. Integrasi pada Aplikasi
Gunakan library yang sesuai dengan bahasa pemrograman Anda. Berikut contoh singkat dengan Node.js menggunakan passport-openidconnect:
const passport = require('passport');const OIDCStrategy = require('passport-openidconnect').Strategy;passport.use('oidc', new OIDCStrategy({ issuer: 'https://sso.example.com/auth/realms/master', authorizationURL: 'https://sso.example.com/auth/realms/master/protocol/openid-connect/auth', tokenURL: 'https://sso.example.com/auth/realms/master/protocol/openid-connect/token', userInfoURL: 'https://sso.example.com/auth/realms/master/protocol/openid-connect/userinfo', clientID: 'myapp', clientSecret: 'SECRET', callbackURL: 'https://myapp.example.com/callback', scope: 'openid profile email'},function(issuer, sub, profile, accessToken, refreshToken, done){ // Cari atau buat pengguna lokal berdasarkan profile.id return done(null, profile);})); 5. Penetapan Peran (Roles) Berdasarkan LDAP
LDAP dapat menyimpan grup pengguna. Pada IdP, map grup LDAP ke peran aplikasi:
# Keycloak User Federation LDAP Mappers- Mapper Type: group-ldap-mapper- LDAP Groups DN: ou=Groups,dc=example,dc=com- Role Prefix: LDAP_- LDAP Filter: (objectClass=groupOfNames)
Token yang dihasilkan akan mengandung klaim roles yang dapat diproses oleh aplikasi.
6. Pengujian & Troubleshooting
- Gunakan
ldapsearchuntuk memastikan binding dan pencarian berhasil. - Periksa log IdP (mis.
/opt/keycloak/standalone/log) untuk kesalahan bind atau mapping. - Pastikan jam sistem IdP dan LDAP sinkron (NTP) supaya token tidak dianggap kadaluarsa.
- Jika menggunakan TLS, pastikan sertifikat CA terpercaya terinstal pada server IdP.
Keamanan Tambahan
- MultiFactor Authentication (MFA) Tambahkan OTP atau push notification pada IdP.
- Account Lockout Konfigurasi LDAP untuk memblokir akun setelah sejumlah percobaan gagal.
- Audit Log Simpan jejak login di LDAP serta IdP untuk kepatuhan.
- Scope Minimum Batasi atribut yang direturn ke aplikasi, hanya kirim yang diperlukan seperti
uid, mail, displayName.
Kesimpulan
Integrasi Single Sign-On dengan LDAP menggabungkan kenyamanan pengguna dan keamanan terpusat. Dengan menyiapkan server LDAP yang aman, mengkonfigurasi Identity Provider (mis. Keycloak, Shibboleth, Okta), serta menyesuaikan aplikasi melalui protokol SAML atau OpenID Connect, organisasi dapat mengurangi beban manajemen password, meningkatkan kepatuhan, dan mempercepat onboarding pengguna baru. Pastikan semua komunikasi dienkripsi, gunakan MFA, serta lakukan pemantauan rutin untuk menjaga integritas sistem.
