Friday, 29 March 2019

Rancang Bangun Single Sign On (SSO) Pada Multi Database 

Pada kesempatan yang lalu saya sempat membuat rancang bangun SSO. Uji literatur cukup lama saya lakukan dan akhirnya mendapatkan konsep yang sederhana untuk bisa menerapkan SSO pada beberapa database yang saya miliki. Untuk memulainya perlu untuk memahami konsep sederhana tentang SSO. Semoga mudah dipahami ya, temens.

Single Sign On (SSO) merupakan suatu konsep mengenai sistem autentikasi yang memudahkan pengguna dalam mengakses banyak layanan namun hanya dengan satu kali login saja. Sedangkan kebalikannya, Single Log Out (SLO) merupakan suatu sistem yang digunakan pengguna untuk keluar dari layanan dengan hanya satu kali logout saja. Tehnologi ini sangat dinikmati, khususnya dalam jaringan sistem yang besar dan bersifat heterogen (di saat sistem operasi serta aplikasi yang digunakan oleh komputer adalah berasal dari banyak vendor, dan pengguna dimintai untuk mengisi informasi dirinya ke dalam setiap platform yang berbeda tersebut yang hendak diakses oleh pengguna). Proses otentifikasi yang banyak pada beberapa aplikasi dapat dihindari dengan mengintegrasikan sebuah Central Authentication Service(CAS) agar aplikasi berbasis web yang telah ada dapat di SSO-kan, sehingga semua proses otentikasi akan ditangani oleh CAS dan proses otentikasi dapat disederhanakan. CAS harus dapat memberikan otentikasi yang kuat, salah satu metode yang dapat dilakukan adalah dengan mengunakan Lightweight Directory Access Protocol(LDAP) sebagai datastore dan Remote Accses Dial In Pengguna (RADIUS) sebagai backend dari CAS guna menghasilkan sebuah sistem SSO. Dengan memusatkan data pengguna pada LDAP dan membebankan proses otentikasi pada RADIUS dan mengintegrasikan keduanya ke dalam CAS telah berhasil membentuk sebuah sistem SSO yang cukup stabil dan dapat diandalkan.

Fungsi LDAP

Fungsi LDAP yaitu untuk merapihkan serta membuat database menjadi terpusat. Dengan adanya jaringan yang terpusat, memungkinkan pengguna untuk berpindah tempat tanpa harus membawa-bawa PC nya.

Kelebihan LDAP
  • Proses otentifikasi dilakukan dengan sederhana
  • Terdapat mekanisme yang menjamin kerahasiaan dan integritas data.
Kekurangan LDAP
  • Terdapat kemungkinan client mengakses server
  • Terdapat mekanisme yang menjamin kerahasiaan dan integritas data.


Langkah selanjutnya kita perlu untuk mengidentifikasi minimal dua database yang akan dilibatkan ke dalam pembuatan SSO. 

Arsitektur SSO Dengan LDAP

LDAP (Light Weight Directory Access Protocol) adalah sebuah protokol yang mengatur mekanisme pengaksesan layanan direktori (directory service), yang dapat digunakan untuk mendeskripsikan banyak informasi seperti informasi tentang data pengguna aplikasi, atau sumber daya pada suatu jaringan seperti printer dan scanner.

Arsitektur Sistem yang akan dibangun dengan berbasis Single Sign On akan dibagi menjadi dua bagian, yaitu flowchart proses login aplikasi SSO dan flowchart proses logout aplikasi SSO.



 Gambar 1.  Flowchart Proses Login Aplikasi SSO


 Gambar 2.  Flowchart Proses Logout Aplikasi SSO


Konsep Kerja LDAP
Adapun penjelasannya adalah sebagai berikut :
  1. Otentifikasi
a.    Otentisasi Username dan Password
·      Pertama-tama, Pengguna X masuk ke portal AppSatker atau E-Kinerja dengan alamat yang sudah ditentukan. Sistem secara otomatis akan melakukan redirect Pengguna X ke portal SSO untuk melakukan login terlebih dahulu.
·     Pengguna X memasukkan Username dan password miliknya ke halaman portal SSO tersebut.
b.    Membuat dan Menerima Identitas Tiket
Portal SSO kemudian akan melakukan pengecekan ke LDAP terkait Pengguna dan password Pengguna tersebut. Jika LDAP mengembalikan hasil pengecekan ‘OK’, maka kemudian Pengguna X akan mendapatkan tiket untuk masuk ke dalam sistem tersebut. Karena sebelumnya Pengguna X akan masuk ke portal AppSatker atau E-Kinerja, maka sistem selanjutnya melakukan redirect ke portal AppSatker atau E-Kinerja setelah otentikasi di Portal SSO tersebut. Pada tiket tersebut tersimpan beberapa informasi meliputi: portal apa yang dituju, id Pengguna tersebut, dan hak akses ke portal lainnya.

  1. Otorisasi
a.    Otorisasi Grup
Setelah di-redirect masuk ke portal AppSatker atau E-Kinerja, portal ini kemudian melakukan pengecekan kembali terhadap Pengguna X. Pengecekan dilakukan untuk melihat Pengguna X masuk ke dalam grup Pengguna apa. Misal Pengguna X termasuk dalam grup administrator. Maka portal inventori kemudian menampilkan menu-menu dan aksi (view, add, edit, delete) yang telah terdefinisi untuk grup administrator di portal inventori tersebut.

b.    Perijinan Grup
·        Selanjutnya Pengguna X dapat melakukan aksi pada portal AppSatker atau E-Kinerja tersebut sesuai hak aksesnya. Perlakuan masing-masing terhadap Pengguna X adalah sama, setiap masuk Pengguna X akan dicek masuk ke grup apa dalam portal tersebut.
·        Jika telah selesai menggunakan suatu portal, maka Pengguna X keluar (logout) dari sistem. Sistem selanjutnya akan menghapus session dan tiket untuk Pengguna X. Sehingga jika ingin masuk kembali, Pengguna X harus melakukan autentikasi ulang.

Pelaksanaan Kegiatan Instalasi Dan Konfigurasi LDAP

LDAP adalah suatu bentuk protokol client-server yang digunakan untuk mengakses suatu directory service. Pada tahap awalnya, LDAP digunakan sebagai suatu front-end bagi X.500, tetapi juga dapat digunakan bersama directory server yang stand-alone dan juga yang lainnya. LDAP memungkinkan kita untuk mengembangkan kemampuan kita yang dapat digunakan untuk mencari suatu organisasi, mencari suatu individu dan juga mencari sumber daya yang lainnya misalnya file maupun alat/device didalam suatu jaringan/network.



Informasi pada LDAP disimpan dalam entry. Layaknya entry pada basis data umunya, setiap entry memiliki beberapa atribut. Setiap atribut dapat memiliki satu atau lebih nilai. Namun, jika pada basis data kita memiliki primary key untuk membedakan suatu entry dengan entry lainnya, dalam LDAP kita memiliki Distinguished Name (DN) yang bernilai unik untuk tiap entry. DN didapat dengan mengurutkan lokasi entry hingga akar hirarki.


Gambar 3.  Hirarki Database Directory Service Pada SSO

Secara prinsip struktur database pada directory service adalah hierarchy seperti yang ditunjukkan pada gambar di atas. Seperti pada struktur hirarki pada umumnya, pada suatu database directory service akan memiliki suatu item yang dijadikan sebagai root. Untuk sebuah titik root, secara umum ditunjukkan dengan suatu atribut dc (Domain Component), namun dapat juga langsung ditunjuk dengan atribut cn (Common Name) atau ou (Organization Unit). Kemudian pada titik daun (leaf) biasanya akan berisi suatu item denga atribut uid (User ID) ataupun cn.

Di dalam LDAP terdapat 2 service utama yaitu : slapd dan slurp. Slapd merupakan LDAP daemon yang melayani request atau permintaan dari client, query dan berkomunikasi dengan backend database. Sedangkan slurp merupakan replication daemon yang berfungsi melayani replikasi data agar terus terjadi sinkronisasi data antara client dan server.

Untuk membangun sebuah server LDAP, ada 3 hal yang perlu diketahui. Yaitu : Schema, Object Class dan Attribute. Schema adalah seperangkat aturan yang mendeskripsikan jenis data apa saja yang akan disimpan, schema akan membantu untuk menjaga konsistensi dan kualitas data sehingga dapat mengurangi terjadinya duplikasi data. Object Class adalah sekumpulan masukan yang memberi informasi jenis group dan membutuhkan atribut yang biasanya terdiri atas attribute names, attribute type, dan attribute syntax yang semuanya terkumpul dalam suatu data yang valid pada setiap kelasnya. Attribute adalah masukan yang sifatnya unik seperti uid, cn, sn, dan lain sebagainya. Attribute sendiri dapat menggunakan single value maupun multiple value.


Kebutuhan Pembangunan SSO 

Melihat dari banyaknya  kesamaan dalam infrastruktur sistem dari pada kedua aplikasi maka dapat dibangun SSO dengan lebih mudah. SSO akan dibangun pada halaman web dengan kebutuhan sebagai berikut :

-          Aplikasi VMWare xSphere
·         ISO Ubuntu Server 16.04(64 bit)
·         2x VM Ubuntu Server (untuk Keycloak dan LDAP)
·         1x Perangkat Mikrotik (untuk bridging network)/Alternatif : gunakan host-only network.
·         Aplikasi KeyCloak
·         OpenJDK & OpenJRE
·         OpenLDAP & phpLDAPAdmin
·         Database1 + plugin SAML 2.0 Single Sign On
·         Database2 + Plugin SAML 2.0 Single Sign On

Instalasi dan Konfigurasi LDAP Server SSO di Ubuntu
Implementasi SSO pada Sistem dibagi menjadi beberapa tahap, yaitu :

1.   Instalasi paket-paket LAMP yang dibutuhkan
      2.    Instalasi LDAP Server
      3.    Menyeting hirarki pada sistem PHPLDAPAdmin
4.  Instalasi SSO pada LDAP Server

Pada tulisan kali ini, akan dibagi menjadi dua karena step yang cukup panjang pada langkah 1 dan 2. Pada tulisan berikutnya akan dibahas langkah 3 dan 4. Selamat mencoba.

Langkah 1 : Instalasi paket-paket LAMP yang dibutuhkan

·        Web Server (menggunakan Apache Web Server)
      #apt-get install apache2


      Ketik 'Y' untuk meneruskan. Tunggu beberapa saat hinggu kursor muncul kembali.



Mengetes Apache sudah aktif dengan mengetik '\\localhost' pada web browser.



·           Php5
               Untuk mengetahui versi php yang tersedia pada root, cek dengan perintah berikut :
               #php -v



       #sudo apt-get install php7.0-cli



      Ketik 'Y' untuk meneruskan. Tunggu beberapa saat hinggu kursor muncul kembali.



·           Database Server
              # sudo apt-get install mysql-server


      Ketik 'Y' untuk meneruskan. Tunggu beberapa saat hinggu kursor muncul kembali.



       Tulis password yang diinginkan, misalnya 'SSOok'. Tekan tombol Enter untuk meneruskan.



        Tulis kembali password yang diinginkan, misalnya 'SSOok'. Tekan tombol Enter untuk meneruskan. Tunggu beberapa saat hinggu kursor muncul kembali.


       # sudo apt-get install mysql-client



·           Plugin untuk MySql
       #sudo apt-get install php7.0-mysql


·           Untuk mengamankan database MySQL yang sudah terinstall
       #mysql_secure_installation


     Tulis 'N' dan menunggu proses dilanjutkan.


     Tulis 'Y' dan menunggu proses dilanjutkan.


     Tulis 'Y' dan menunggu proses dilanjutkan.


     Tulis 'Y' dan menunggu proses dilanjutkan.


      Tulis 'Y' dan menunggu proses ditampilkan tulisan
      'Success
     All done!'

·       Front End atau web base untuk Database Server (menggunakan phpmyadmin)
             # sudo apt-get install phpmyadmin


Ketik 'Y' untuk meneruskan. Tunggu beberapa saat hinggu kursor muncul kembali.


   Tekan tombol enter pada pilihan 'Apache2'.


    Tekan tombol enter pada pilihan 'Yes'.


   Tulis password database server yang diinginkan, misalnya 'SSOMySQL'. Tekan tombol Enter untuk meneruskan.


     Tulis kembali password yang diinginkan, misalnya 'SSOMySQL'. Tekan tombol Enter untuk meneruskan. Tunggu beberapa saat hinggu kursor muncul kembali.


·           Untuk meningkatkan kecepatan PHP lakukan perintah ini:
       # apt-get -y install php7.0-opcache php-apcu


·           Mengaktifkan website SSL di Apache
               # a2enmod ssl
               # a2ensite default-ssl
       # systemctl restart apache2


·   Mengamankan website dengan Let's Encrypt SSL Certificate dengan menginstall phyton-letsencript-apache
      # apt-get -y install python-letsencrypt-apache


·           Akses Root ke PHPMyAdmin dengan MariaDB
               # mysql -u root -p
               Masukkan password MySQL yang dudah terinstall : SSOok

       Langkah 2 : Instalasi LDAP Server

       ·         Edit hostname VM
            # gedit /etc/hostname
            Ubah nama server dari : [PCname]-virtual-machine
     menjadi : server.ldap.org


     simpan file dan keluar
    # reboot

·         Instalasi LDAP
       # apt-get install slapd ldap-utils


     Tulis 'Y' dan menunggu proses dilanjutkan.


    Tulis password Root : 'myrootpassword'. Tekan tombol Enter untuk meneruskan.


·         Mengubah konfigurasi LDAP
             # gedit /etc/ldap/ldap.conf
      Ubah isi file konfigurasi berikut ini :

    
     Menjadi seperti ini :


      dengan perubahan pada :
      BASE          dc=ldap,dc=com
      URI              ldap://localhost:389

·         Mengkonfigurasi ulang konfigurasi SLAPD
      # dpkg-recongure slapd


     Pilih 'No' dan menunggu proses dilanjutkan.


     Gunakan nama domain default yang sudah ditentukan. Tekan tombol Tab untuk mengarahkan kursor ke Tombol 'OK'. Tekan tombol 'OK' dan menunggu proses dilanjutkan.


     Tulis password Root : 'myrootpassword'. Tekan tombol Enter untuk meneruskan.


   Pilihkah default 'HDB' dengan cara mengarahkan kursor atas ke pilihan 'HDB'. Tekan tombol Enter untuk meneruskan.


    Pilih 'No' dan menunggu proses dilanjutkan.


    Pilih 'Yes' dan menunggu proses dilanjutkan.


   Pilih 'No' dan menunggu proses dilanjutkan. Tunggu beberapa saat hinggu kursor muncul kembali.


·         Mengetes server LDAP
      # ldapsearch -x


·         Menginstall LDAP Server Administration 
      # apt-get install phpldapadmin


      Tulis 'Y' dan menunggu proses dilanjutkan. Tunggu beberapa saat hinggu kursor muncul kembali. Sebelum meneruskan proses selanjutnya perlu untuk mempersiapkan IP address untuk konfigurasi selanjutnya. Untuk itu, IP dapat dilihat dengan perintah ifconfig.

      # ifconfig



      Buka file konfigurasi pada /etc/phpldapadmin/config.php
      Perubahan pada baris 161


     Perubahan pada baris 285, 292, dan 299.


     Perubahan pada baris 325.


     Klik tombol 'Save' dan keluar. Restart service apache2.
     # systemctl restart apache2
     Note : usahakan untuk terus login dengan Root

     Menyeting hirarki pada sistem PHPLDAPAdmin dengan membuka web browser dan uji phpldapadmin di IP http://192.192.1.1/phpldapadmin.



      Lakukan login pada PHPLDAPAdmin dan tulis password Root. Klik tombol 'Authenticate' dan tunggu hingga muncul menu utama.


     Klik pohon hirarki 'dc=ldap, dc=com' dan pilih 'Create new entry here' pada sebelah kanan menu. Pilih radio button 'Generic : Organisational Unit'.


     Tulis nama unit organisasi : 'database1' dan klik tombol 'Create Object'.


    Klik tombol 'Commit'.


     Klik pilihan 'Create a child entry'.


     Pilih pilihan 'Generic : Posix Group'.


     Tulis nama grup : 'database1-group' dan klik tombol 'Create Object'.


     Klik tombol 'Commit'.


      Hasil dari proses ini dapat dilihat dari bertambahnya cabang pada unit organisasi database1,yaitu bertambah dg adanya group 'database1-group'. Selanjutnya menambahkan user group dengan cara klik pilihan 'Create a child entry'.


      Pilih pilihan 'Generic : User Account'.


       Buat akun user dari group : database1-group
       Common name      : (lewati saja krn akan terbentuk sendiri)
       First name              : Dum
       GID Number          : database1-group
       Home directory      : /home/users/mr.dummy
       Last name              : My
       Login shell             : bin/sh
       Password                : (misal) thePassw0rd
       (confirm pwd)           thePassw0rd
       Klik tombol 'Create Object'

     Klik tombol 'Commit'.
     Hasil :

No comments:

Post a Comment

Reviu Jurnal : Optimal Control Problem Of Treatment For Obesity In A Closed Population Oleh :  D. Aldila, N. Rarasati, N. Nuraini...