web service security

advertisement
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 -
Download