Implementing Single Sign On Using Cookies
Teknik Single Sign On akan memungkinkan user untuk hanya melakukan satu kali login/logout saja. Misalkan Anda mengoperasikan tiga buah portal yang masing2 memiliki fungsionalitas, tujuan dan teknologi yang berbeda-beda, maka Anda dapat menyediakan kemudahan kepada user dengan cara membiarkan user untuk hanya melakukan satu kali login saja untuk dapat menggunakan ketiga buah portal tadi. Login pada portal A, dan kemudian otomatis ter-login juga pada portal B dan portal C. Contoh yang paling dekat adalah single sign on antara portal geeks dan WSS-Id yang telah dijelaskan oleh welly di blognya.
Seperti yang telah umum dilakukan, cookies digunakan untuk memelihara informasi seorang user, sesaat setelah dia berhasil di authentikasi. Dengan bermodalkan premis diatas, maka dapat dikatakan bahwa Single Sign On dapat diimplementasi dengan menggunakan cookie dengan cara membuat sebuah cookie yang dikenali dan dapat diakses oleh portal-portal lainnya. Dibawah adalah contoh gambaran implementasi Single Sign On:

AP adalah kependekan dari authentication provider. AP dapat berupa sebuah server yang akan melakukan proses authentikasi yang mana hasil dari authentikasi dapat dikirimkan via HTTP Response. Sedangkan informasi2 credentials yang hendak di authentikasi dapat dikirimkan via HTTP Request. Informasi yang dikirim via HTTP Response dapat digunakan untuk membuat sebuah cookie yang direncanakan untuk dapat diakses dan dikenali oleh portal2 lainnya.
Proses Login
Secara sederhana, proses login dapat diisi oleh code yang melakukan HTTP Request pada authentication provider. Informasi credentials dapat dikirimkan via HTTP Request tersebut. Authentication provider kemudian dapat diatur untuk dapat mengirimkan informasi2 tertentu via HTTP Response yang mana informasi2 tersebut dapat digunakan untuk membuat cookie. HTTP Request dapat dilakukan dengan menggunakan System.Net.HttpWebRequest (Tolong bedakan dengan System.Web.HttpWebRequest). System.Net.HttpWebRequest digunakan karena dalam skenario SSO ini, portal adalah merupakan sebuah client yang hendak mengakses AP.
private void SSOLogin()
{
//data requeststring postData = "id=id&pwd=password";
System.Text.
ASCIIEncoding encoding = new System.Text.ASCIIEncoding();byte[] data = encoding.GetBytes(postData);
//make a requeststring ap_url = "http://josso.batujajar.co.id/josso.do";
System.Net.HttpWebRequest req = System.Net.WebRequest.Create(ap_url);
req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
//send the requestSystem.IO.Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
//catch the response
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());string results = sr.ReadToEnd();
sr.Close();
//create cookieHttpCookie cookie = new HttpCookie("xyz");
cookie.Domain =
".batujajar.co.id";cookie.Path = "/";cookie.Name = "xyz";
cookie.Value = GetTicketID(results);
cookie.Expires = System.DateTime.Now.AddDays(+1);
Response.Cookies.Add(cookie);
}
private string GetTicketID(string str)
{
//get the ticket id
}
kode diatas akan melakukan HTTP Request pada authentication provider (yang kebetulan di develop dengan menggunakan java sehingga berakhiran .do). HTTP Response kemudian digunakan untuk membuat cookie. Agar cookie dikenali dan dapat diakses oleh domain tertentu saja, maka property Domain dari cookie diisi.
Proses Logout
Peristiwa yang terjadi pada proses logout adalah dengan cara menghancurkan cookie sehingga semua portal tidak dapat menemukan cookie dan kemudian portal akan logout. Cookie dihancurkan dengan cara meng-ekspire-kan cookie tersebut.
private void SSOLogout()
{
//...cookie.Expires = System.DateTime.Now.AddDays(-1);
//...
}