www.tobuku.com WEB SERVICE SECURITY Tingkat: April 2010 Oleh √ Pemula : Feri Djuandi Menengah Platform : .NET 2.0, Ms IIS PENDAHULUAN Web Service (WS) adalah salah satu bentuk dari model pemrograman terdistribusi (distributed computing) yang pada masa ini sudah diimplementasikan secara luas. Perkembangannya sudah cukup mapan, memiliki komunitas yang luas, didukung oleh vendor-vendor besar dan diadopsi untuk berbagai variasi aplikasi bisnis. WS bukanlah sesuatu yang baru. Sama seperti produkproduk teknologi lainnya yang dikenal saat ini, WS adalah hasil sebuah evolusi - bahkan idenya telah lahir jauh sebelum Internet dikenal seperti saat ini. Pada tahun 1996 Marc Andreessen salah seorang pendiri Netscape menulis di dalam sebuah publikasi bahwa bisnis di masa depan akan menggunakan Internet Inter-ORB Protocol (IIOP) untuk ”meminta layanan dari satu platform ke platform lain yang berbeda”. Kedengaran cukup akrab di telinga? Tentu saja istilah IIOP tidak pernah dikenal luas saat ini, namun mungkin Anda akrab dengan istilah Simple Object Access Protocol (SOAP). Konsep WS mulai berkembang saat itu karena para visioner teknologi melihat bahwa Internet akan mengalami perkembangan yang sangat pesat dan salah satu tantangannya adalah membuat sistem-sistem yang terhubung di dalam jaringan itu untuk bisa berkomunikasi satu sama lain. Model pemrograman terdistribusi yang di dalammnya dilandasi oleh Remote Procedure Call (RPC) yaitu berupa pemanggilan layanan-layanan oleh sebuah sistem terhadap sistem-sistem lain adalah cikal bakal dari WS. Pada masa itu protokol pemrograman terdistribusi yang sangat populer adalah Common Object Request Broker Architecture (CORBA) yang dikenal pada UNIX, dan Component Object Model (COM) yang dikenal pada Windows. Dua model pemrograman inilah yang banyak digunakan oleh para programmer untuk mengintegrasikan sistem-sistem yang bekerja di dalam sebuah jaringan lokal. Seiring berjalannya waktu maka definisi ”jaringan” telah bergeser dari sekedar Local Area Network (LAN) yang sempit menjadi sesuatu yang jauh lebih luas, yaitu Internet yang global. Dampak dari perkembangan ini adalah sistem-sistem menjadi lebih transparan dan terbuka untuk diakses melalui banyak kanal. Hal ini agak berbeda dibandingkan masa lalu dimana sistem-sistem relatif terisolasi dan sulit untuk berkomunikasi antar jaringan. Protokol CORBA dan COM didesain untuk bekerja pada lingkungan LAN. Walaupun protokol CORBA dan COM tetap mendapatkan tempat di hati para programmer, namun sepertinya saat ini adalah waktunya bagi Web Service. Dewasa ini banyak praktisi teknologi yang beralih pada WS untuk alasan fleksibilitas dan skalabilitas yang lebih tinggi Ada satu hal yang menjadi konsekuensi dari sebuah sistem yang terbuka, yaitu masalah keamanan (security). Hal keamanan ini pula yang menjadi isu penting di dalam WS. Serupa dengan RPC pada protokol yang lain, pemanggilan layanan WS oleh sebuah sistem harus melalui tahapan-tahapan keamanan untuk memastikan pemanggil dan fungsi yang dipanggilnya adalah valid. Sehubungan dengan ini, ada proses otentikasi dan otorisasi yang dilakukan oleh system penyedia layanan WS terhadap pemanggilnya untuk memastikan bahwa ia boleh dilayani. Tanpa mekanisme ini maka WS menjadi sistem yang terbuka lebar bagi siapapun untuk mengaksesnya -1- Mahir www.tobuku.com termasuk pihak-pihak yang tidak berkepentingan. Tentunya ini adalah sesuatu yang tidak diinginkan. Di dalam dokumen ini istilah pemanggil layanan WS secara bergantian juga disebut WS client. INFORMASI: Otentikasi dan otorisasi adalah dua hal yang berbeda. Otentikasi (authentication) adalah proses yang dilakukan infrastuktur keamanan untuk memastikan keaslian pengakses (manusia atau sistem), artinya dia memang sungguh-sungguh entiti tersebut, bukan entiti lain yang mengaku menjadi pengakses tersebut. Proses otentikasi umumnya diawali dengan membaca credential pengakses tersebut yaitu user ID dan password. Otorisasi (authorization) adalah proses yang dilakukan infrastuktur keamanan untuk memberikan hak-hak akses yang sesuai dengan tingkat akses yang dimiliki pengakses. Otorisasi dilakukan setelah pengakses berhasil melalui otentikasi. -2- www.tobuku.com JENIS-JENIS KEAMANAN WEB SERVICE Di dalam platform Windows, Web Service diaplikasikan melalui .NET Framework, Internet Information Services (IIS) dan tentunya sistem operasi Windows itu sendiri. Jenis-jenis keamanan yang dapat diterapkan pada platform ini adalah: 1. Windows authentication 2. Forms authentication 3. Passport authentication 4. None Pilihan jenis keamanan tersebut dapat dikonfigur melalui tag <authentication> di dalam file Web.config dari aplikasi Web Service yang bersangkutan. Berikut ini diperlihatkan potongan isi file tersebut: ... <authentication mode="Windows | Forms | Passport | None"> ... </authentication> ... Sesuai dengan namanya, Windows authentication adalah metoda otentikasi menggunakan akun Windows untuk memvalidasi credential pemanggil. Tipe ini sangat baik diterapkan pada lingkungan intranet dimana pemanggil Web Service berasal dari dalam jaringan lokal dan telah dikenal secara baik. Lebih lanjut, Windows authentication dibedakan menjadi: Integrated Windows authentication Basic authentication Digest authentication Client Certificate authentication Tipe-tipe otentikasi di atas sesuai dengan cara penanganan yang dilakukan oleh IIS. Pada dokumen ini tipe yang akan dibahas adalah Integrated Windows dan Basic authentication. Pada Forms authentication, pemanggil yang tidak terotentikasi akan dialihkan pada sebuah halaman web yang dikonfigur pada file Web.config. Halaman web tersebut umumnya berisi kolom User ID dan password yang harus dibuat oleh programmer. Pada otentikasi jenis ini, daftar User ID dan password-nya dapat disimpan di dalam file Web.config, file XML terpisah atau di dalam database. Forms authentication dapat diaktifkan dengan: 1. Mengkonfigur atribut dari tag <authentication> tag di dalam file Web.config menjadi “Forms”. Contoh: ... <system.web> <authentication mode="Forms"/> </system.web> ... -3- www.tobuku.com 2. Tidak memperbolehkan anonymous users pada IIS. Jenis otentikasi ini kurang cocok jika diterapkan pada Web Service karena ia akan mengalihkan pemanggil pada sebuah user interface sebelum layanan WS dapat dijalankan. Pemanggil sebetulnya mengharapkan sebuah pesan SOAP yang dikembalikan oleh WS bukan halaman HTML. Jika ini yang terjadi, maka masalah akan timbul. Salah satu artikel yang cukup bagus mengenai Forms authentication dapat dibaca pada: http://www.15seconds.com/issue/020220.htm Pada Passport authentication, sebuah layanan terpusat dikelola oleh Microsoft menyediakan sebuah pusat login untuk WS client. Pemanggil yang tidak terotentikasi dialihkan ke situs Passport site. Serupa dengan Forms authentication, pengalihan ini akan menyebabkan masalah bagi pemanggilnya kecuali hal ini ditangani secara baik pada program pemanggilnya. Passport authentication dapat diaktifkan dengan: 1. Mengkonfigur atribut dari tag <authentication> tag di dalam file Web.config menjadi “Passport”. Contoh: ... <system.web> <authentication mode="Passport"/> </system.web> ... 2. Tidak memperbolehkan anonymous users pada IIS. Salah satu artikel yang cukup bagus mengenai Passport authentication dapat dibaca pada: http://www.devx.com/security/Article/17483 Jika pilihan otentikasi adalah None, maka itu adalah kesempatan bagi programmer untuk melakukan otentikasi buatan sendiri (custom authentication). Custom authentication dapat diaktifkan dengan: 1. Mengkonfigur atribut dari tag <authentication> tag di dalam file Web.config menjadi “None”. Contoh: ... <system.web> <authentication mode="none"/> </system.web> ... 2. Memperbolehkan anonymous users pada IIS. Pembahasan mengenai custom authentication akan dijelaskan lebih lanjut pada dokumen ini. -4- www.tobuku.com IMPLEMENTASI WS TANPA KEAMANAN Untuk memperjelas pemahaman mengenai Web Service tanpa security, akan dibuat dua buah program sederhana yaitu sebuah Web Service dan sebuah WS client. Semua contoh program di dalam dokumen ini menggunakan bahasa pemrograman C#, namun penjelasannya akan sangat mudah dipahami bagi programmer VB juga. Program WS yang akan dibuat ini adalah sebuah kalkulator penjumlahan. Pemanggilan WS akan disimulasikan melalui program WS client yang akan memanggil fungsi penjumlahan tersebut. Membuat Web Service 1. Pada Visual Studio, buat sebuah Web Site baru dan pilih tipenya sebagai ASP.NET Web Service. Namakan web site ini sebagai WSCalc. 2. Buat sebuah class baru dengan tipe Web Service atau dapat juga mengedit dari class yang sudah ada (saat membuat sebuah projek Web Service yang baru, secara default Visual Studio membuat sebuah class bernama Service). Namakan class tersebut sebagai SecureCalculator. 3. Buka SecureCalculator.cs dan ketik kode program berikut ini. using using using using System; System.Web; System.Web.Services; System.Web.Services.Protocols; namespace WSCalc { [WebService(Namespace = "http://localhost/WSCalc/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class SecureCalculator : System.Web.Services.WebService { public SecureCalculator() { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public int calculateInt(int num1, int num2) { return num1 + num2; } } } -5- www.tobuku.com 4. Buka SecureCalculator.asmx dan ketik kode program berikut ini. <%@ WebService Language="C#" CodeBehind= "~/App_Code/SecureCalculator.cs" Class= "WSCalc.SecureCalculator" %> 5. Tambahkan file Web.Config jika belum ada di dalam projek tersebut melalui menu Website Add New Item kemudian pilih Web Configuration File. 6. Compile projek tersebut dengan menu Build Publish Web Site. Sebagai hasil compile, akan diperoleh sebuah folder ..\PrecompiledWeb\WSCalc yang di dalamnya terdapat file SecureCalculator.asmx dan sub-folder bin. Saat ini Web Service tersebut belum dipublikasikan sehingga belum dapat diakses oleh WS client. Untuk melakukan hal tersebut, ikuti langkah-langkah di bawah ini. 1. Copy folder WSCalc hasil kompilasi ke ..\Inetpub\wwwroot. 2. Buka aplikasi Internet Services Manager, dan buat sebuah virtual directory di bawah Default Web Site yang sudah ada. Namakan virtual directory itu sebagai WSCalc dan pilih folder yang dibuat pada langkah sebelumnya. 3. Isi dari virtual directory tersebut tampak seperti gambar di bawah ini. Klik-kanan pada file SecureCalculator.asmx dan pilih menu Browse untuk melakukan uji coba Web Service tersebut. 4. Silakan melakukan uji coba pada Web Service tersebut dengan memasukkan angkaangka yang akan dijumlahkan. -6- www.tobuku.com Kembali kepada IIS, jika property dari file SecureCalculator.asmx ditampilkan maka tampak bahwa file ini memperbolehkan Anonymous access yang artinya sebuah WS client tidak perlu diotentikasi untuk bisa memanggil WS tersebut. Itulah sebabnya dikatakan WS ini tidak diproteksi dengan mekanisme keamanan. Ia bebas dipanggil oleh siapa saja. -7- www.tobuku.com -8- www.tobuku.com Membuat WS Client WS client adalah sebuah system yang mengkonsumi sebuh Web Service. Bentuknya bisa beragam, mulai dari sebuah aplikasi desktop, web site atau program service. Untuk penjelasan kali ini akan dibuat sebuah aplikasi desktop karena lebih mudah dibuat. 1. Buat sebuah projek baru dengan tipe Windows Application dan beri nama WSClient. 2. Tambahkan referensi Web Service melalui menu Project Add Web Reference. Selanjutnya pilihlah Web services on the local machine, karena SecureCalculator yang dibuat sebelumnya adalah WS yang dijalankan pada komputer lokal. 3. Berikutnya pilih Web Service SecureCalculator dan beri nama referensi tersebut sebagai WSCalculator. 4. Buka class Form1 dan tambahkan beberapa label, textbox dan button sehingga tampak seperti di bawah ini. -9- www.tobuku.com 5. Kode program dari class ini diperlihatkan sebagai berikut. using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Net; namespace ClientCalc { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnCalculate_Click(object sender, EventArgs e) { WSClient.WSCalculator.SecureCalculator objCalc = new WSClient.WSCalculator.SecureCalculator(); int result; txtError.Text = ""; try { result = objCalc.calculateInt(Convert.ToInt16(txtNum1.Text), Convert.ToInt16(txtNum2.Text)); txtResult.Text = result.ToString(); } catch (Exception exp) { txtError.Text = exp.Message; } } } } Perhatikan pada kode program di atas tidak ditemui rutin untuk proses otentikasi karena memang tidak dibutuhkan oleh WS yang dipanggil. 6. Saat program client ini dijalankan, maka pemanggilan WS akan mengembalikan hasil penjumlahan dari angka-angka yang dimasukkan. - 10 - www.tobuku.com IMPLEMENTASI INTEGRATED WINDOWS AUTHENTICATION Integrated Windows authentication adalah cara yang aman untuk mengirimkan credential WS client di dalam jaringan Windows. Dengan metode ini, Web Service akan mempercayakan proses otentikasi sebuah WS client kepada Windows sehingga jika WS client tersebut sudah sukses melewati otentikasi oleh sebuah domain Windows maka ia diperbolehkan untuk memanggil layanan Web Service. Cara ini skema terbaik untuk digunakan di dalam intranet menggunakan Windows, namun ia tidak dapat diterapkan pada lingkungan Internet. Untuk mengaktifkan Integrated Windows authentication, berikut adalah langkah-langkah yang perlu dilakukan. Menyiapkan Web Service 1. Copy folder ..\Inetpub\wwwroot\WSCalc pada folder baru dan beri nama ..\Inetpub\wwwroot\WSCalcIWA. 2. Pastikan tag <authentication mode> pada file Web.Config bernilai “Windows”. 3. Dengan menggunakan Internet Services Manager, buat sebuah virtual directory di bawah Default Web Site yang sudah ada. Namakan virtual directory itu sebagai WSCalcIWA dan pilih folder yang dibuat pada langkah sebelumnya. 4. Atur property dari file SecureCalculator.asmx dengan menghilangkan tanda cek dari opsi Anonymous access dan menandai opsi Interated Windows authentication. - 11 - www.tobuku.com 5. Hal penting lainnya yang harus dilakukan adalah mengatur keamanan file SecureCalculator.asmx pada level sistem operasi Windows. Dengan menggunakan Windows Explorer, buka file itu dan pastikan hanya grup dan akun tertentu yang dapat membuka file tersebut (misalnya dengan menghapus akses untuk akun guest). 6. Lakukan uji coba terhadap Web Services ini dengan menggunakan Internet browser seperti di bawah ini. Silakan lakukan uji coba untuk menghapus atau menambah akun atau grup akun Windows lainnya pada langkah sebelumnya dan bandingkan efekefeknya. - 12 - www.tobuku.com Memodifikasi WS Client 1. Dari program desktop yang dibuat sebelumnya, WSClient – salin folder projek tersebut menjadi folder lain dan beri nama WSClientIWA. Buka projek yang baru ini. 2. Ubah Web Reference WSCalculator menjadi http://localhost/WSCalcIWA/SecureCalculator.asmx. 3. Buka class Form1.cs dan ubah kode programnya dengan menambahkan baris-baris program yang ditandai berikut ini. using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Net; namespace ClientCalc { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnCalculate_Click(object sender, EventArgs e) { WSClient.WSCalculator.SecureCalculator objCalc = new WSClient.WSCalculator.SecureCalculator(); int result; NetworkCredential objCredential = CredentialCache.DefaultNetworkCredentials; objCalc.Credentials = objCredential; txtError.Text = ""; try { result = objCalc.calculateInt(Convert.ToInt16(txtNum1.Text), Convert.ToInt16(txtNum2.Text)); - 13 - www.tobuku.com txtResult.Text = result.ToString(); } catch (Exception exp) { txtError.Text = exp.Message; } } } } Modifikasi program di atas bisa dijelaskan sebagai berikut. ... NetworkCredential objCredential = CredentialCache.DefaultNetworkCredentials; Baris ini berusaha untuk mendapatkan credential dari akun Windows yang sedang login, dala hal ini adalah akun Anda yang sedang login di dalam jaringan Windows. ... objCalc.Credentials = objCredential; Baris ini mengirimkan credential dari akun Windows tersebut kepada Web Service, dengan demikan Web Service akan mengetahui credential dari WS client yang memanggilnya. Perhatikan bahwa dalam proses ini tidak ada mekanisme otentikasi karena Web Service sudah mempercayakan hal itu kepada sistem operasi Windows. 4. Silakan menjalankan program WS client ini dan lakukan beberapa uji coba. 5. Cobalah menghilangkan akses dari beberapa akun atau grup Windows terhadap file SecureCalculator.asmx (misalnya grup ”Domain users”) dan perhatikan efeknya seperti contoh di bawah ini. TIPS: Saat mengatur akses keamanan untuk Web Service (file asmx), upayakan tetap memberikan hak akses untuk akun ASPNET dan SYSTEM minimal read dan “read & execute”. - 14 - www.tobuku.com BASIC AUTHENTICATION Basic authentication berbeda dengan Integrated Windows authentication karena ia tidak memerlukan WS client untuk login terlebih dahulu ke dalam jaringan Windows namun otentikasi akan dilakukan pada saat pemanggilan Web Services itu sendiri. Pada Basic authentication WS client diminta untuk menyebutkan credential-nya, selanjutnya informasi ini akan dikirim kepada server Web Service. Basic authentication relative kurang aman karena credential yang dikirim oleh WS client dapat dicuri di tengah jalan. Solusi yang umum untuk mengamankan jalur komunikasi adalah dengan menggunakan secure hypertext transfer protocol (HTTPS) sehingga Basic authentication cukup aman digunakan. Contoh implementasi Basic authentication diperlihatkan sebagai berikut. Membuat Akun Lokal Sebuah akun local akan dibuat pada server Web Service karena dalam penjelasan ini tidak akan digunakan akun domain Windows walaupun secara umum akun domain juga dapat digunakan dalam metoda ini. Berikut ini adalah akun lokal yang akan dibuat: Nama User : DEMO_USER Password : p@ssw0rd - 15 - www.tobuku.com Menyiapkan Web Service 1. Copy folder ..\Inetpub\wwwroot\WSCalc pada folder baru dan beri nama ..\Inetpub\wwwroot\WSCalcBA. 2. Pastikan tag <authentication mode> pada file Web.Config bernilai “Windows”. 3. Dengan menggunakan Internet Services Manager, buat sebuah virtual directory di bawah Default Web Site yang sudah ada. Namakan virtual directory itu sebagai WSCalcBA dan pilih folder yang dibuat pada langkah sebelumnya. 4. Atur property dari file SecureCalculator.asmx dengan menghilangkan tanda cek dari opsi Anonymous access dan menandai opsi Basic authentication. - 16 - www.tobuku.com 5. Hal penting lainnya yang harus dilakukan adalah mengatur keamanan file SecureCalculator.asmx pada level sistem operasi Windows. Dengan menggunakan Windows Explorer, buka file itu dan pastikan hanya akun DEMO_USER yang dapat membuka file tersebut (hilangkan akun/grup lain kecuali ASPNET dan SYSTEM). 6. Lakukan uji coba terhadap Web Services ini dengan menggunakan Internet browser seperti di bawah ini. Berbeda dengan sebelumnya, kali ini sebuah kotak login akan muncul meminta untuk dimasukan user name dan password. Silakan isi dengan informasi akun lokal yang telah dibuat sebelumnya. - 17 - www.tobuku.com Memodifikasi WS Client 1. Dari program desktop yang dibuat sebelumnya, WSClient – salin folder projek tersebut menjadi folder lain dan beri nama WSClientBA. Buka projek yang baru ini. 2. Ubah Web Reference WSCalculator menjadi http://localhost/WSCalcBA/SecureCalculator.asmx. 3. Buka class Form1.cs dan ubah kode programnya dengan menambahkan baris-baris program yang ditandai berikut ini. using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Net; namespace ClientCalc { public partial class Form1 : Form { public Form1() { InitializeComponent(); - 18 - www.tobuku.com } private void btnCalculate_Click(object sender, EventArgs e) { WSClient.WSCalculator.SecureCalculator objCalc = new WSClient.WSCalculator.SecureCalculator(); int result; NetworkCredential objCredential = new NetworkCredential("DEMO_USER", "p@ssw0rd", ""); objCalc.Credentials = objCredential; txtError.Text = ""; try { result = objCalc.calculateInt(Convert.ToInt16(txtNum1.Text), Convert.ToInt16(txtNum2.Text)); txtResult.Text = result.ToString(); } catch (Exception exp) { txtError.Text = exp.Message; } } } } Modifikasi program di atas bisa dijelaskan sebagai berikut. ... NetworkCredential objCredential = new NetworkCredential("DEMO_USER", "p@ssw0rd", ""); Baris ini membuat sebuah credential dari akun lokal DEMO_USER. Pada contoh ini informasi akun diketik langsung pada program (hard coded) dimana hal ini tidak direkomendasikan. Pada praktek yang umum, informasi akun akan lebih baik dimasukan melalui kotak login atau jika bentuknya permanen bisa diketikkan pada file konfigurasi. ... objCalc.Credentials = objCredential; Baris ini mengirimkan credential dari akun tersebut kepada Web Service, dengan demikan Web Service akan mengetahui credential dari WS client yang memanggilnya. Perhatikan bahwa proses otentikasi akan dilakukan oleh server Web Service saat pemanggilan diterimanya. Sekali lagi, Basic autentication mengandung kerawanan jika credential dikirimkan tanpa pengaman enkripsi. 4. Silakan menjalankan program WS client ini dan lakukan beberapa uji coba. - 19 - www.tobuku.com 4. IMPLEMENTASI CUSTOM AUTHENTICATION Jika diputuskan akan menggunakan Custom authentication, maka proses otentikasi tidak akan bergantung pada IIS demikian pula credential dari WS client tidak akan dibuat di dalam Windows namun setiap user ID dan password-nya dibuat berdasarkan aturan dan mekanisme khusus yang didefinisikan menurut kebutuhan tersendiri. Selanjutnya proses otentikasi pun akan dilakukan dengan cara yang serupa. Karena kali ini otorisasi dan otentikasi akan ditangani sendiri oleh Web Service maka pada di dalam komponen ini harus terdapat sub-sub program yang menangani proses-proses keamana tersebut. Sebagai contoh, penanganan keamanan pada Custom authentication dapat dilakukan melalui sebuah class berikut ini. public class UserManager { public UserManager(); public bool Authenticate(string userName, string password); //Other members and methods } UserManager adalah sebuah class yang didefinisikan secara public. Saat sebuah Web Service dipanggil oleh WS client maka sebelum WS melakukan apapun ia akan memanggil UserManager untuk melakukan otentikasi apakah WS client yang memanggilnya adalah credential yang valid. Jika “ya”, maka method Authenticate akan mengembalikan nilai TRUE, sedangkan sebaliknya adalah FALSE. Ini adalah sebuah teknik sederhana yang bisa menggambarkan algoritma keamanan pada Custom authentication. Untuk memberikan gambaran yang lebih jelas, berikut ini akan dibuat sebuah projek baru yang berkaitan dengan uraian di atas. 1. Pada Visual Studio, buat sebuah Web Site baru dan pilih tipenya sebagai ASP.NET Web Service. Namakan web site ini sebagai WSCalcCA. 2. Buat sebuah class baru dan namakan sebagai UserManager. 3. Buka UserManager.cs dan ketik kode program berikut ini. namespace WSCalcCA { public class UserManager { public UserManager() { // // TODO: Add constructor logic here - 20 - www.tobuku.com // } public bool Authenticate(string userName, string password) { //This is an example of a very basic authentication //Please DO NOT use this kind. It is only for demo if (userName == "DEMO_USER" && password == "p@ssw0rd") return true; else return false; } } } Mekanisme otentikasi di atas hanyalah sebuah contoh untuk keperluan demonstrasi. Untuk penggunaan yang sesungguhnya tentu saja cara di atas bukan teknik yang baik, mohon jangan ditiru. Pada prakteknya user ID dan password akan lebih baik jika disimpan terpisah di dalam database yang aman dan menggunakan enkripsi. 4. Buat sebuah class baru dengan tipe Web Service atau dapat juga mengedit dari class yang sudah ada (saat membuat sebuah projek Web Service yang baru, secara default Visual Studio membuat sebuah class bernama Service). Namakan class tersebut sebagai SecureCalculator. 5. Buka SecureCalculator.cs dan ketik kode program berikut ini. using using using using System; System.Web; System.Web.Services; System.Web.Services.Protocols; namespace WSCalcCA { [WebService(Namespace = "http://localhost/WSCalcCA/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class SecureCalculator : System.Web.Services.WebService { public SecureCalculator() { //Uncomment the following line if using designed components //InitializeComponent(); } bool IsAuthenticated { get { object state = Session["IsAuthenticated"]; if (state != null) return (bool)state; else { IsAuthenticated = false; return false; } } set { Session["IsAuthenticated"] = value; } } [WebMethod(EnableSession = true)] - 21 - www.tobuku.com public bool LogIn(string userName, string password) { UserManager userManager = new UserManager(); bool authenticated; authenticated = userManager.Authenticate(userName, password); if(authenticated==false) { throw new UnauthorizedAccessException("Invalid user name or password provided"); } IsAuthenticated = authenticated; return authenticated; } [WebMethod(EnableSession = true)] public void LogOut() { IsAuthenticated = false; } [WebMethod(EnableSession = true)] public int calculateInt(int num1, int num2) { if (IsAuthenticated == false) { throw new UnauthorizedAccessException("User not authenticated"); } return num1 + num2; } } } Yang membedakan program ini dibandingkan yang sebelumnya adalah penambahan opsi EnableSession = true di awal baris setiap method. Hal ini dilakukan untuk mengaktifkan sesi pada saat login berhasil. Dalam sesi tersebut WS client yang sudah terotentikasi dapat memanggil method-method dari WS. Di luar sebuah sesi, WS client tidak dapat memanggil method. 6. Buka SecureCalculator.asmx dan ketik kode program berikut ini. <%@ WebService Language="C#" CodeBehind= "~/App_Code/SecureCalculator.cs" Class= "WSCalc.SecureCalculator" %> 7. Tambahkan file Web.Config jika belum ada di dalam projek tersebut melalui menu Website Add New Item kemudian pilih Web Configuration File. 8. Buka file Web.Config dan edit tag <authentication mode> sehingga nilainya menjadi “None”. ... <authentication mode="None" /> ... 9. Compile projek tersebut dengan menu Build Publish Web Site. - 22 - www.tobuku.com Sebagai hasil compile, akan diperoleh sebuah folder ..\PrecompiledWeb\WSCalcCA yang di dalamnya terdapat file SecureCalculator.asmx dan sub-folder bin. Publikasikan Web Service tersebut dengan langkah-langkah sebagai berikut: 1. Copy folder WSCalcCA hasil kompilasi ke ..\Inetpub\wwwroot. 2. Buka aplikasi Internet Services Manager, dan buat sebuah virtual directory di bawah Default Web Site yang sudah ada. Namakan virtual directory itu sebagai WSCalcCA dan pilih folder yang dibuat pada langkah sebelumnya. 3. Isi dari virtual directory tersebut tampak seperti gambar di bawah ini. Pastikan directory security dari WSCalcCA dan file security dari SecureCalculator.asmx mengijinkan Anonymous access. - 23 - www.tobuku.com Untuk uji coba, silakan memanggil Web Service itu menggunakan Internet browser. Tampilannya diperlihatkan seperti di bawah ini dimana sekarang WS tersebut memiliki tiga buah method. Tanpa login terlebih dahulu, silakan memanggil method calculate. Reaksi yang seharusnya terjadi adalah munculnya pesan kesalahan pada layar browser. Kesalahan tersebut bisa ditampilkan secara berbeda pada beberapa browser. Sebagai contoh Internet Explorer di atas tidak menampilkan pesan yang spesifik. Namun jika hal yang sama dicoba pada Mozilla Firefox maka akan muncul sebuah pesan kesalahan yang lebih jelas. Pesan ini adalah teks yang sengaja ditampilkan oleh program jika user tersebut belum login ke dalam WS. - 24 - www.tobuku.com Sekarang coba melakukan login terlebih dahulu, dan panggil kembali method yang sama. Jika otentikasi berhasil, seharusnya kali ini Web Service mengembalikan hasil pemanggilannya dengan benar. - 25 - www.tobuku.com Referensi: Web Services Security in The .NET Framework. Mansoor Ahmed Siddiqui. http://www.15seconds.com/issue/020312.htm .NET Web Services Security. Juval Lowy. http://www.code-magazine.com/article.aspx?quickid=0307071&page=1 - 26 -