| | 27 September 24
Link Web
 UNIKOM SINGLE SIGN ON API ( Part 1 )
Info URL
 
Review

I. Single Sign On

Sigle Sign On merupakan fasilitas yang memberikan kemudahan untuk user yang melakukan login ketika mereka surfing di Internet. Dengan fasilitas Single Sign On, user hanya akan diminta untuk melakukan login sekali saja untuk semua fasilitas online yang ada. Hampir semua situs besar dunia telah memanfaatkan fasilitas ini dengan implementasi yang beragam, tapi dengan tujuan yang sama, diantaranya Yahoo!, Google, Microsoft dan sebagainya.

Unikom Single Sign On (USSO) bertujuan untuk memudahkan user dalam berinteraksi online dan mengintegrasikan account user ke dalam satu database yang dapat digunakan oleh masing-masing aplikasi online di Unikom.

Dengan USSO, pengembang aplikasi berbasis web di Unikom tidak perlu lagi membuat basis data dan coding sistem yang khusus menangani session login.

Berikut adalah gambaran implementasi USSO:

I.1.  Unikom Single Sign On API

Unikom Single Sign On API (USSO-API) merupakan Application Interface atau Library (pustaka) yang akan digunakan oleh pengembang aplikasi online berbasis web di Unikom agar dapat mengintegrasikan aplikasi yang dibuatnya dengan fasilitas USSO.

USSO-API di-coding dengan menggunakan bahasa Pemrograman PHP (Hypertext Preprocessor), USSO-API disusun secara class based dengan nama class "ssoclass", dan dapat diimplementasikan secara mudah di dalam script PHP yang sedang di bangun. USSO-API selain memberikan fasilitas single sign on, juga memberikan fasilitas transfer encryption tanpa SSL.

I.2.  Kebutuhan Dasar Pengembangan Aplikasi menggunakan USSO-API

Agar aplikasi yang sedang dibangun dapat melakukan interaksi dengan server USSO, maka beberapa kebutuhan berikut ini wajib untuk dimiliki:

  1. Aplikasi berada pada domain *.unikom.ac.id. Untuk mendapatkan domain tersebut pada komputer local, Kita dapat melakukan editing pada file (C:\Windows\System32\Drivers\etc\hosts) untuk pengguna windows. Dan menambahkan baris "127.0.0.1  test.unikom.ac.id".
  2. Terdapat Direct Connection ke login.unikom.ac.id. Untuk mendapatkan direct connection ke login.unikom.ac.id, Kita dapat melakukan editing pada file (C:\Windows\System32\Drivers\etc\hosts) untuk pengguna windows. Dan menambahkan baris "192.168.2.109  login.unikom.ac.id".


II. Dasar-dasar USSO-API

ssoclass merupakan class yang harus dipanggil setiap kali aplikasi akan mengakses session login. Berikut adalah contoh pemanggilan ssoclass pada script:

<?php

/* Include file API terlebih dahulu
   sebelum initialisasi ssoclass */


include_once "library/ssoclass.php";

/* Initialisasi ssoclass */
$sso = new ssoclass("NamaWebsiteContoh");

?>

Dengan script di atas, server akan membuatkan object ssoclass dan menyimpannya dalam variabel $sso, Yang kemudian variabel $sso tersebut dapat digunakan untuk melakukan interaksi antara aplikasi dengan USSO.

Pada script di atas terdapat perintah include_once, yang bertujuan agar script PHP yang sedang berjalan memanggil file ssoclass.php untuk digunakan sebagai library/API pada script yang sedang berjalan. (Catatan: pemanggilan ssoclass.php tergantung dari letak direktori file ini berada).

include_once "library/ssoclass.php";

Ketika initialisasi ssoclass terdapat string "NamaWebsiteContoh" yang akan digunakan oleh USSO-API sebagai nama yang unik dalam penyimpanan session. String yang diisi harus berbeda dengan aplikasi lainnya yang pernah di bangun, tapi harus selalu sama pada aplikasi yang sedang di bangun.

Anda dapat menggunakan nama lain pada string ini dengan catatan tidak menggunakan spasi atau karakter khusus. Berikut adalah beberapa contoh initialisasi yang valid:


$sso = new ssoclass("KampusOnline");
$sso = new ssoclass("NilaiOnline");

/* Agar variabel dapat diakses secara global
   kita dapat memasukkannya ke dalam variable
   $_SERVER seperti berikut
*/
$_SERVER['sso'] = new ssoclass("UnikomCenter");

Dan berikut adalah beberapa contoh initialisasi yang tidak valid:


/* Tidak valid karena menggunakan karakter minus pada nama web */
$sso = new ssoclass("Kampus-Online");

/* Tidak valid, karena object yang dibuat tidak
   dimasukan ke dalam variabel */
new ssoclass("NilaiOnline");

Catatan: Jangan memanggil session_start() bila Anda melakukan initialisasi ssoclass. ssoclass akan secara otomatis memanggil session_start dengan id yang unik yang telah diatur agar dapat berjalan lancar dengan USSO-API. Anda dapat menggunakan variabel $_SESSION secara langsung setelah initialisasi ssoclass.

Initialisasi ssoclass hanya dapat dilakukan sebelum buffer output (perintah-perintah seperti echo, print_r, dsb) dikirimkan, karena ssoclass akan melakukan setcookie, header dan session_start ketika initialisasi ssoclass dilakukan.

II.1.    Mengetahui Status Login dengan isLogin()

Setelah initialisasi ssoclass, aplikasi dapat memanggil berbagai fungsi pada object ssoclass yang telah dibuat, salah satu yang paling sederhana adalah isLogin().  

Fungsi ini akan memberikan hasil kembali (return) berupa boolean (true, false), dimana bila session yang berlangsung telah melakukan login, maka hasil return akan berupa nilai true, bila belum melakukan login maka sebaliknya akan berupa nilai false.

SINTAX:

boolean $ssoobj->isLogin()

Fungsi ini adalah fungsi dasar yang akan sering sekali digunakan untuk memastikan user yang sedang berinteraksi dengan aplikasi yang berjalan telah melakukan login atau belum.

Berikut adalah contoh script sederhana yang menggunakan fungsi isLogin():

<?php
include_once 'library/ssoclass.php';
$sso = new ssoclass("TestLogin");

if ($sso->isLogin()){
  echo 'Telah Login..';
}
else{
  echo 'Belum Login..';
}

?>

Pada contoh di atas, fungsi isLogin() merupakan child object dari variabel $sso, fungsi ini dapat digunakan pada seleksi kondisi seperti contoh tersebut.

II.2.    Mengetahui Username dengan getLoginUsername()

Username atau Nama User merupakan data yang sangat penting untuk session login, karena username merupakan data unik yang dimiliki oleh satu account dan tidak akan sama dengan account lainnya.

SINTAX:

string $ssoobj->getLoginUsername();

Catatan: Fungsi ini hanya akan memberikan return username bila session yang berjalan sudah melakukan login, bila belum melakukan login fungsi ini akan memberikan nilai false dan menset ssoMessage (1) : User belum melakukan login.

Berikut adalah contoh penggunaan fungsi getLoginUsername():

if ($sso->isLogin()){

    echo 'Anda telah login dengan menggunakan user: ';

    echo $sso->getLoginUsername();

}
...

II.3.    Mengetahui Nama Tampilan dengan getLoginDisplayName()

Username digunakan sebagai id pada database yang akan digunakan sebagai salah satu data untuk melakukan login, sedangkan nama tampilan digunakan untuk identitas yang lebih mudah dibaca oleh user tanpa ada batasan cara penulisan.

SINTAX:

string $ssoobj->getLoginDisplayName();

Catatan: Fungsi ini hanya akan memberikan return username bila session yang berjalan sudah melakukan login, bila belum melakukan login fungsi ini akan memberikan nilai false dan menset ssoMessage (1) : User belum melakukan login.

Berikut adalah contoh penggunaan fungsi getLoginDisplayName():

if ($sso->isLogin()){
  echo 'Hallo ';
  echo $sso->getLoginDisplayName();
  echo ', Selamat menikmati fasilitas online kami...';
}
...

II.4.    Mengetahui Nomor Identitas user dengan getLoginID()

USSO menggunakan konsep multi-type-users, sehingga diperlukan satu kunci ID untuk mengakses data lengkap dari suatu account. Sampai saat ini terdapat 4 jenis account utama pada USSO, yaitu Mahasiswa, Dosen, Karyawan dan Alumni.

getLoginID() akan menghasilkan nomor identitas dari account yang sedang melakukan login. Berikut adalah tabel nomor identitas berdasarkan tipe account:

Tipe

Isi

Contoh Isi

Mahasiswa

NIM

10102901

Dosen

Pin Absensi Dosen

10002

Karyawan

Pin Absensi Karyawan

20001

Alumni

NIM Alumni

10102001

 

Data hasil getLoginID() dapat digunakan pada database pangkalan untuk mendapatkan data lengkap account yang dimaksud, atau dapat juga menggunakan fungsi yang ada di USSO-API, yaitu getUserDetailData() dan getCurrentUserDetailData().

 

SINTAX:

string $ssoobj->getLoginID();

Catatan:

Fungsi ini hanya akan memberikan return username bila session yang berjalan sudah melakukan login, bila belum melakukan login fungsi ini akan memberikan nilai false dan menset ssoMessage(1) : User belum melakukan login.

Berikut adalah contoh penggunaan fungsi getLoginID():

if ($sso->isLogin()){
  echo 'Nomor ID Anda: ';
  echo $sso->getLoginID();
}
...


III. Login Interface

USSO-API Memberikan keleluasaan kepada para developer untuk menampilkan interface login, baik itu dengan membuat form secara manual dengan design yang diatur sendiri pada aplikasi atau secara global dengan menggunakan form default yang berada di login.unikom.ac.id.

Berikut adalah gambaran login interface dengan menggunakan interface default juga interface sendiri / manual

Interface Default

Interface Sendiri / Manual

III.1. Mengambil URL Halaman login dengan getLoginPageURL()

Bila Anda hendak membuat aplikasi web tanpa ingin membuat kembali tampilan/interface login, Anda dapat menggunakan fungsi berikut.

SINTAX:

string_url $ssoobj->getLoginPageURL($redirect_to, $loginTitle);

Return Value: String URL yang dapat digunakan pada link, url ini merupakan alamat form login pada login.unikom.ac.id.

$redirect_to = Alamat web yang akan dituju setelah user melakukan login. Argumen ini harus di isi dengan URL Absolute/Lengkap dengan awalan http://.

$loginTitle = Merupakan judul yang akan ditampilkan pada halaman login yang dimaksud.

Catatan: Fungsi ini hanya dapat dipanggil bila user belum melakukan login, bila telah melakukan login, fungsi ini akan memberikan return false, dan menset ssoMessage(1) : User telah melakukan login.

Berikut adalah contoh penggunaan fungsi getLoginPageURL():

if ($sso->isLogin()){
  echo 'Anda Telah Login...';
}
else{

  /* Link akan di simpan pada variabel $loginpage */
  $loginpage = $sso->getLoginPageURL('http://test.unikom.ac.id/',
                       'Login ke Aplikasi Test');
  echo 'Maaf, Anda harus login terlebih dahulu...<br />';
  echo '<a href="'.$loginpage.'">Klik di sini untuk login..</a>

}
...

Atau bila Anda ingin langsung mengarahkan user ke halaman login tanpa harus mengklik link terlebih dahulu, dapat menggunakan contoh berikut:

if ($sso->isLogin()){
  echo 'Anda Telah Login...';
}
else{

  /* Link akan di simpan pada variabel $loginpage */
  $loginpage = $sso->getLoginPageURL('http://test.unikom.ac.id/',
                       'Login ke Aplikasi Test');

  header('location: '.$loginpage);
  exit();

}
...

III.2. Membuat Form Secara Manual

Bila Anda hendak membuat aplikasi web beserta form login dengan design interface sendiri, Anda dapat menggunakan printFormLogin(), getFormLogin() dan printCloseForm(),closeForm().

 

III.2.A.   printFormLogin() dan getFormLogin()

Fungsi ini digunakan sebagai form pembuka sebelum Anda membuat interface login lainnya. Syarat yang harus dimiliki pada form login adalah:

TAG

Name

Value

<input type="text"

username

""

<input type="password"

password

""

<input type="checkbox"

Keep

"1"

<input type="submit"

submit

"Login"

SINTAX getFormLogin:

string_XHTML $ssoobj->getFormLogin($redirect_to);

Return Value: String berupa XHTML yang berisi tab <form> dengan fasilitas enkripsi transfer data.

$redirect_to = Alamat web yang akan dituju setelah user melakukan login. Argumen ini harus di isi dengan URL Absolute/Lengkap dengan awalan http://.

SINTAX printFormLogin:

[OUTPUT XHTML] $ssoobj->printFormLogin($redirect_to);

Return Value: Tidak Ada

Output Buffer: Fungsi ini akan langsung menampilkan string_XHTML yang sama dengan hasil getFormLogin(). Memanggil printFormLogin() sama dengan melakukan perintah echo $sso->getFormLogin().

$redirect_to = Alamat web yang akan dituju setelah user melakukan login. Argumen ini harus di isi dengan URL Absolute/Lengkap dengan awalan http://.

III.2.B.   printCloseForm() dan closeForm()

Kedua fungsi ini akan menghasilkan string_XML yang sama dan statis, yaitu "</form>", bedanya closeForm() akan menghasilkan return value, sedangkan printCloseForm() akan menampilkannya langsung pada output buffer.

 

III.2.C.   Contoh Pembuatan Form Login secara Manual

Berikut adalah hal-hal yang harus dimiliki oleh form login dalam tahapan:

  1. Memanggil printFormLogin() atau getFormLogin() untuk membuka form login.
  2. Membuat input login sesuai dengan tabel di atas.
  3. Memanggil printCloseForm() atau closeForm() untuk menutup form login.

Berikut adalah contoh script form login secara manual:

<?php
/* Buat Form Login <form action="....
 *
 * Syarat field (wajib ada):
 *   - name="username" tipe="text"
 *   - name="password" tipe="password"
 *   - name="keep" checkbox (remember login)
 **/

 $sso->printFormLogin('http://test.unikom.ac.id/');
?>
  <b>SSO LOGIN</b><br />
  Username: <input type="text" name="username" /><br />
  Password: <input type="password" name="password" /><br />
  <input type="checkbox" name="keep" value="1" />
         Ingat Login<br /><br />
  <input type="submit" name="s1" value="Login" />

<?php
  /* Akhir dari form login </form> */
  $sso->printCloseForm();
?>