Contoh Implementasi SSO CAS: Webmail+Imap
17/12/12 08:45
Saya mencoba meringkas beberapa tahap dalam implementasi webmail dengan menggunakan SSO CAS.
Pada dasarnya semua aplikasi WEB bisa memanfaatkan CAS untuk SSO, begitu juga aplikasi webmail, yaitu roundcube, squirellmail maupun group office.
Tahap yang perlu dipersiapkan adalah server CAS yang sudah support LDAP dan pengaturan service lewat database. Untuk keperluan authorisasi aplikasi, maka perlu diatur juga atribut yang bisa dibaca oleh service, disini telah disiapkan atribut tambahan seperti kdUnitKerja, email, emplyeeType, EmployeeNumber. Tahap pembuatan CAS lebih banyak berurusan dengan masalah SSL dan attribute release yang memerlukan debugging yg cukup lama.
Setelah server SSO selesai, kemudian saya coba cari2 tentang dukungan roundcube maupun squirrelmail terhadap CAS. plugin cas_authentication kemudian saya coba pasang. Ternyata plugin sudah tdk uptodate, sehingga harus setengah deploy ulang dari awal. Proses debuging pada tahap ini cukup lama, sempai masuk ke cara kerja RC dan sedikit patch pada RC. Informasi dari internet tentang bagaimana cara roundcube/webmail client bisa terotentikasi ke imap sangat kurang. Sebagian informasi itu adalah imap server juga harus support CAS.
Imap server ugm menggunakan courier-imap dengan authdaemon, dan hasil pencarian di internet tidak menemukan satupun yang telah menggunakan courier-imap dengan otentikasi CAS. Kemudian dilakukan beberapa percobaan. Sebagai catatan, server imap yang dipakai di UGM adalah menggunakan s****s dan telah menggunakan otentikasi ldap. Agar dapat menggunakan otentikasi CAS, digunakanlah pam_cas, untuk itu ditambahkanlah otentikasi auth_pam pada authdaemon.
Instalasi pam_cas tidak begitu mulus, karena harus disesuaikan sana sini dengan environment s****s. Setelah sukses memasang pam_cas dan mengkonfigurasinya, Perlu diketahui bahwa pam_cas hanya untuk authentikasi semata yang menerima userid dan PGT (proxy granting ticket) sebagai password. Untuk dapat dipakai dengan courier-imap, userid itu harus bisa mendapatkan informasi ttg uid,gid serta homedirectory. Hal ini bisa didapatkan dengan nss (name servce switch) ldap, konfigurasi yang tidak lazim. Umumnya pam_ldap menggunakan nss_ldap dan pam_unix menggunakan /etc/passwd
UPDATE:
Saat ini selain courier-imap juga digunakan dovecot, untuk dovecot tidak perlu menggunakan nss_ldap. Informasi homedir dst, bisa ditambahkan di userdb dengan ldap pada dovecot. jadi untuk dovecot cukup pam_cas saja.
Bagi yang membuat sebuah email dengan user system, pam_cas tidak perlu konfigurasi yang ribet. tetapi kasus di UGM email menggunakan virtual user dengan id sistem unggal, untuk itu perlu pengaturan terhadap nss_ldap (karena informasi user didapat dari sini). cara kerja auth_pam pada authdaemon yaitu setelah auth sukses, kemudian mendapatkan management account dan informasi user (nss). Sedangkan untuk management account (parameter `account` pada pam) untuk cas ini tidak ditentukan, sehingga saya tambahkan modul dummy yg selalu mengembalikan nilai benar.
Setelah beberapa kali mencoba dan menganalisa dari debug (auth.debug maupun debug authdaemon) akhirnya otentikasi sukses. imap server sudah support cas, selanjutnya tinggal konfigurasi roundcube untuk menyesuaiakan. Selanjutnya dilakukanlah ujicoba sederhana, dari analisa awal, php imap sering terhubung ke imap server, dengan perilaku ini request ke imap server akan tinggi dan tentunya ke server cas serta ldap juga. Padahal password/tiket cas itu sekali pakai, sehingga akan terjadi load yg cukup lumayan. Untuk itu ditambahkanlah imapproxy yang akan menjaga koneksi persistent ke imap proxy dalam kurun waktu tertentu, sehingga mengurangi jumlah otentikasi.
Selanjutnya adalah ujicoba kalangan terbatas, dari umpan balik pertama diketahui bahwa user email tdk diketahui, apakah memakai ugm.ac.id atau
mail.ugm.ac.id. Yang keluar malah localhost.ugm.ac.id. Dari sini penggunaan atribut release dari CAS mulai digunakan yaitu atribut email. Dari atribut ini bisa ditentukan informasi email pengguna.
Perubahan selanjutnya adalah patching untuk perubahan password, karena RC dengan cas tdk menyimpan password, maka utk pengecekan current password langsung dilakukan dengan bind ke LDAP dan jika berhasil langsung dirubah paswordnya.
Setelah RC selesai, selanjutnya adalah modifikasi squirrellmail. disini dilakukan pembuatan login.php berdasarkan redirect.php. (akan dibahas khusus).
Group Office sudah berhasil di CAS kan secara sederhana, sebelumnya GO dipatch dibeberapa tempat seperti authimap dan authldap yg bisa jalan barengan (dengan atau tanpa @domain). Authimap sangat mudah diimplementasikan sedangkan authldap perlu dilakukan banyak modifikasi. seperti informasi email dan pembuatan akun email otomatis yang berulang-ulang (saat ini sudah OK).
Masalah
- Masalah mulai muncul ketika load tinggi. Pertama kali ditemukan laporan drop by imap server. Setelah ditelusuri authdaemon bermasalah, restart selesai.
- Masalah timbul kembali, dan ternyata yg menyebabkan authdaemon macet adalah gagalnya auth_pam I/O error, penyebabnya adalah nss_ldap. nss_ldap tidak dapat failover ke ldap lainnya ketika terjadi masalah pada salah satu ldap. setelah dilihat di source codenya ternyata tidak ada timelimit pada koneksinya, sehingga ketika koneksi ke ldap berhasil tetapi hasil query tdk dpt dimunculkan, maka terjadi bottleneck. Solusi saat ini baru perbaikan konfigurasi. Lihat perkembangan berikutnya. ldap normal, koneksi lancar kembali.
- auth_ldap normal bisa, tetapi auth_pam bermasalah. webmail.ugm.ac.id lancar tetapi beta.webmail.ugm.ac.id gagal auth. Penyebabnya adalah informasi dari nss tdk mendapatkan atribut homeDirectory. Setelah dicek ternyata karena nss_ldap telah memakai ldap lain yg acl nya belum disesuaikan.
catatan: Untuk petunjuk dan hal lain mengenai tiap-tiap instalasi/deployment dan konfigurasi diatas akan saya tulis di blog lain kali.
dikirim oleh: M. Zudha Ghofur
Artikel Terkait
SSO dengan menggunakan CASImplementasi CAS untuk akses hotspot
Implementasi CAS dengan dreamspark
Komentar
« SSO dengan menggunakan CAS Implementasi CAS dengan dreamspark »
terimakasih atas tulisannya yang sangat bermanfaat sekali untuk saya, alangkah senangnya saya jika agan bersedia memberikan dokumentasi implementasi SSO tersebut, karena saya sedang kebingungan dengan tema TA saya yang tentang SSO ini.
mohon bantuannya :)
Oke
— muhamad iqbal ramadhan · 17/09/13 22:13 · #