Penerapan RESFUL Web Service pada Disain Arsitektur Sistem ...
Pengamanan Web Service Dengan Otentikasi SOAP Web Service... · Web viewKeamanan informasi memiliki...
-
Upload
truongdung -
Category
Documents
-
view
216 -
download
0
Transcript of Pengamanan Web Service Dengan Otentikasi SOAP Web Service... · Web viewKeamanan informasi memiliki...
Pengamanan Web Service
Dalam bab ini kita akan membahas tentang teknik pengamanan terhadap web
service yang kita bangun. Sebelum kita membahas lebih lanjut tentang teknik
pengamanan web service, sebaiknya kita memahami beberapa konsep yang
mendasarinya.
Keamanan Informasi (Information Security)Web service akan selalu berhubungan dengan informasi. Keberadaan web service
hanyalah sebagai alternatif yang berfungsi sebagai salah satu alat bantu dalam proses
pengolahan informasi. Sedangkan proses pengolahan informasi itu sendiri selalu
berkaitan dengan keamanan.
Keamanan informasi memiliki sasaran untuk memelihara kerahasiaan
(confidentiality), integritas (integrity) dan ketersediaan informasi (availability) dalam
suatu organisasi, dan dicapai dengan kombinasi komponen yang baik, desain arsitektural
yang baik, serta perlakuan yang teliti dalam pusat pengelolaannya.
Keamanan informasi bertanggung jawab pada tiga hal, yaitu:
Confidentiality, adalah suatu jaminan bahwa informasi hanya dapat digunakan
secara bersama oleh organisasi atau orang yang diberi hak.
Integrity, adalah jaminan bahwa informasi adalah asli dan lengkap serta dapat
dipercaya ketepatan tujuannya.
Availability, adalah jaminan bahwa sistem yang bertanggung jawab pada
pengiriman, penyimpanan dan pengolahan informasi dapat diakses ketika
dibutuhkan.
Mekanisme Keamanan InformasiDikarenakan tidak ada peralatan tunggal yang dapat memelihara integritas
informasi, maka penting untuk menempatkan empat mekanisme keamanan dalam struktur
kinerja yang berlapis. Empat mekanisme tersebut adalah:
Otentikasi user
Enkripsi data
Penyaringan paket jaringan
Kendali akses fisik
Prinsip keamanan yang baik adalah “defense in depth” atau pertahanan yang
sungguh-sungguh mendalam. Jangan pernah bersandar pada mekanisme keamanan
tunggal dan meletakkannya dalam desain berlapis sehingga seorang hacker dapat masuk
melalui salah satu lapisan dan melakukan serangannya.
Sebagai contoh, penyaringan paket yang menghalangi akses dari alamat jaringan
luar dapat mencegah akses dari seorang penyerang yang telah mencuri password
otentikasi. Enkripsi data dapat melindungi kerahasiaan informasi bahkan ketika
penyerang menyadap kabel jaringan dengan cara mengalahkan mekanisme kendali akses
fisik.
Otentikasi user, adalah mekanisme yang dirancang untuk mengidentifikasi user
secara unik, menempatkan user pada hak akses informasi yang sesuai, dan menjejaki
aktifitas mereka. Otentikasi pada umumnya dilakukan dengan meminta kunci akses
(dapat berupa username, password, informasi biometric, kartu pengenal, ataupun smart
card) dan menentukan hak akses mereka.
Enkripsi data, adalah mekanisme yang melakukan proses penyandian data untuk
mencegah pihak yang tidak diberi hak untuk melihat, mengamati, dan memodifikasi
informasi. Mekanisme ini memiliki sasaran untuk melindungi integritas dan kerahasiaan
informasi, bahkan ketika data yang disandikan itu melewati jalur media yang tidak aman
(seperti internet). Enkripsi data bekerja sedemikian sehingga hanya penerima yang dituju
yang dapat membaca data tersebut dengan menggunakan suatu algoritma dan kunci
enkripsi. Sebagai contoh, suatu sesi terminal remote yang menggunakan secure-shell SSH
melakukan enkripsi data dengan menggunakan algoritma DES.
Penyaringan paket jaringan, adalah mekanisme pengamanan pada level
jaringan yang dapat dilakukan pada router dan gateway dengan menganalisis header dari
paket IP, kemudian mengizinkan atau menolak pengiriman paket berdasarkan pada
alamat sumber, alamat tujuan, tipe protokol, nomor port TCP, panjang paket dan
sebagainya. Mekanisme ini berguna untuk mencegah akses bahkan sebelum penyerang
dihadapkan pada otentikasi terhadap sistem yang dituju. Firewall adalah alat yang
melakukan penyaringan paket dan melakukan analisis terhadap paket tersebut untuk
menentukan apakah diizinkan atau ditolak. Gambar di bawah ini mengilustrasikan
mekanisme pengamanan paket pada level jaringan:
Gambar Sebuah firewall pada level jaringan
Kendali akses fisik, adalah mekanisme pengamanan yang paling mendasar.
Mekanisme ini mencegah pencurian data yang dilakukan penyerang dengan cara
mengakses langsung pada peralatan fisik. Sebelum mengeluarkan banyak biaya untuk
mengamankan data terhadap ancaman yang berasal dari jaringan, pastikan untuk
mengendalikan keamanan akses fisik ke server kritis dan infrastruktur jaringan.
Otentikasi SOAPTeknik pengamanan web service dengan menggunakan otentikasi SOAP
merupakan metode yang cukup sederhana. Proses otentikasi SOAP dilakukan dengan
cara menyisipkan suatu informasi pada pesan SOAP yang menggambarkan bahwa suatu
pesan SOAP memiliki keaslian tersendiri yang bersifat unik dari suatu client tertentu
yang meminta layanan. Informasi yang disisipkan ini berisi data otentikasi dari client
yang mengajukan request. Informasi tersebut merupakan data otentikasi SOAP request
yang berupa username dan password.
Berikut ini adalah langkah-langkah yang diterapkan dalam proses otentikasi
SOAP:
1. Client menyusun sebuah paket SOAP request dalam sebuah SOAP envelope
2. Client menyisipkan sebuah data informasi otentikasi ke dalam struktur SOAP request
tersebut
3. Client mengirimkan SOAP request melalui protokol HTTP ke aplikasi server (web
service provider)
4. Server menerima pesan SOAP resquest kemudian melakukan parsing
5. Server mendapatkan data informasi otentikasi dari pesan SOAP request
6. Server mencocokkan data informasi otentikasi dengan database server
7. Apabila data informasi otentikasi sesuai, maka server menangani request, jika tidak
server akan menolak request
8. Server mengirimkan pesan SOAP response kepada client berikut informasi tentang
status otentikasi.
Dalam menerapkan otentikasi SOAP, aplikasi server membutuhkan suatu
database yang berfungsi untuk menyimpan data-data semua client yang berhak untuk
mengakses layanan yang tersedia. Dengan demikian hanya client yang terdaftar dalam
database tersebut yang berhak untuk mengkonsumsi layanan. Teknik pengamanan ini
bertujuan untuk mencegah para hacker mengirimkan SOAP request yang berisi instruksi-
instruksi ataupun data yang dapat merugikan server.
Bagaimana Otentikasi SOAP Dilakukan?Selanjutnya kita akan membahas tentang bagaimana otentikasi SOAP ini
dilakukan. Sebelum membahasnya kita perhatikan kembali struktur standar dari suatu
pesan SOAP:
Gambar Struktur paket pesan SOAP
Pada struktur pesan SOAP di atas, kita melihat terdapat dua elemen utama SOAP
yaitu Header dan Body. Elemen header merupakan elemen yang bersifat opsional yang
berisi data-data tambahan yang dapat digunakan oleh server untuk keperluan khusus.
Elemen body merupakan elemen pokok yang harus ada dalam suatu pesan SOAP, elemen
ini berisikan muatan data pesan induk dari SOAP itu sendiri.
Ada 2 alternatif tempat untuk meletakkan data informasi otentikasi pesan SOAP,
yaitu pada elemen header atau pada elemen body. Apabila proses penyusunan suatu
pesan SOAP membutuhkan mekanisme pengkodean isi (misalnya enkripsi ataupun
kompresi) terhadap pesan yang terdapat dalam elemen body, maka tidak mungkin
meletakkan data otentikasi ke dalam elemen body SOAP. Sebagai contoh, jika suatu
server menerima pesan SOAP yang elemen body-nya telah dienkripsi atau dikompresi,
nantinya server perlu mengetahui data informasi otentikasi yang dipakai untuk
menentukan status keotentikan pesan SOAP tersebut. Tidak mungkin menanam informasi
mengenai keotentikan suatu pesan SOAP ke dalam elemen body karena isinya sendiri
akan dienkripsi atau dikompresi. Maka solusinya adalah lebih tepat untuk menempatkan
informasi otentikasi ke dalam elemen header pesan SOAP.
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope>
<SOAP-ENV:Header>----------
</SOAP-ENV:Header>
<SOAP-ENV:Body>----------
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Header
Body
Terdapat beberapa penggunaan terhadap elemen header SOAP, beberapa di
antaranya adalah:
Otentikasi. Server dapat meminta pengirim untuk mengotentikkan dirinya sendiri
sebelum pesan diproses.
Informasi pernyataan keamanan. Jika penerima memerlukan jaminan bahwa isi
pesan belum berubah, pengirim dapat menandatangani tubuh pesan secara digital
dan menempatkan hasilnya ke dalam header.
Informasi routing. Jika pesan tersebut perlu dirunut ke banyak tujuan, tujuan dan
urutannya dapat dimasukkan ke dalam header.
Transaksi. Penerima mungkin menjalankan sejumlah aksi dalam lingkup
transaksi pengirim.
Informasi pembayaran. Jika penerima pesan menyediakan layanan ke client
berdasarkan biaya per pemakaian, informasi yang diperlukan untuk menarik
pembayaran dapat ditanamkan dalam header-nya.
Setelah kita memahami dasar-dasar pemahaman tentang proses otentikasi pesan
SOAP, sekarang kita akan membahas tentang teknik pemrograman yang menerapkan
kemanan web service dengan menggunakan otentikasi SOAP.
NuSOAP toolkit sampai pada versi terakhir (v1.9.5) pada saat buku ini ditulis
belum menyediakan fasilitas otentikasi SOAP. Oleh karena itu kita akan melakukan
sedikit modifikasi terhadap class library NuSOAP dengan menambahkan satu fungsi
untuk menyisipkan data informasi otentikasi ke dalam elemen header SOAP dan
beberapa penambahan rutin program dalam class tersebut.
Fungsi yang digunakan untuk menyisipkan data informasi otentikasi ini ke dalam
header SOAP diletakkan pada class “soapclient”. Fungsi tersebut diberi nama
“SetSOAPSecurityHeader”, berikut ini adalah kode programnya:
function SetSOAPSecurityHeader ($username=false,$password=false){
$auth = ("<wsse:Security>"."<wsse:UsernameToken>"."<wsse:Username>$username</wsse:Username>"."<wsse:Password>$password</wsse:Password>"."</wsse:UsernameToken>""</wsse:Security>");
return $auth;}
Gambar Fungsi untuk menyisipkan header security pesan SOAP
Data informasi otentikasi di atas memiliki root elemen yang diberi nama
“UsernameToken”. Sub elemen “username” dan “password” digunakan untuk
menempatkan item data otentikasi pesan SOAP. String otentikasi yang dihasilkan
kemudian disisipkan kedalam header pesan SOAP yang akan dikirim. Sehingga paket
pesan SOAP yang akan dikirim akan menghasilkan format paket SOAP berikut ini:
Gambar Format string elemen header SOAP
Perhatikan kode di atas, elemen header yang berisi data informasi otentikasi
disisipkan ke dalam pesan SOAP.
Enkripsi SOAP
'<?xml version="1.0" encoding="'.$this->soap_defencoding .'"?'. '>'.'<SOAP-ENV:Envelope'.$ns_string. '>'.
'<SOAP-ENV:Header>'.'<wsse:Security>'.
'<wsse:UsernameToken>'.'<wsse:Username>$username</wsse:Username>'.'<wsse:Password>$password</wsse:Password>'.
'</wsse:UsernameToken>'.'</wsse:Security>'.
'</SOAP-ENV:Header>'.
'<SOAP-ENV:Body>'.'</SOAP-ENV:Body>'.'</SOAP-ENV:Envelope>'
Header SOAP yang berisi data informasi otentikasi
Web service sebagai tool alternatif dalam sistem terdistribusi melakukan
kinerjanya dengan menggunakan SOAP dalam mekanisme HTTP GET dan HTTP POST.
Pada prinsipnya SOAP merupakan sebuah teks murni dalam format XML yang seringkali
berisikan informasi-informasi yang sensitif yang harus dilindungi. Satu-satunya cara
untuk melindungi data tersebut adalah dengan melakukan penyandian (enkripsi) terhadap
informasi tersebut.
Pada penjelasan sebelumnya, telah dijelaskan tentang mekanisme keamanan yang
diterapkan dengan menambahkan data informasi otentikasi ke dalam elemen header
SOAP. Selanjutnya kita akan membahas sebuah mekanisme keamanan web service lebih
lanjut, yaitu dengan melakukan enkripsi baik pada elemen header maupun elemen body
pada struktur pesan SOAP.
Bagaimana Enkripsi SOAP Dilakukan?Sebelum membahas tentang bagaimana enkripsi SOAP dilakukan, perhatikanlah
dua contoh paket SOAP berikut ini:
Gambar Paket pesan SOAP yang tidak dienkripsi
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body>
<ns1:contactResponse xmlns:ns1="urn:contactServerAuth"><output xsi:type="SOAP-ENC:Array" SOAP-
ENC:arrayType="unnamed_struct_use_soapval[3]"><item>
<name xsi:type="xsd:string">Yadi Utama</name><company xsi:type="xsd:string">PT. Gamatechno</company><address xsi:type="xsd:string">Jl. Cik Di Tiro 34, Yogyakarta</address><phone xsi:type="xsd:string">081328462499</phone><email xsi:type="xsd:string">[email protected]</email>
</item></output>
</ns1:contactResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body>
<ns1:contact_detailResponse xmlns:ns1="urn:contactServerAuth"><output xsi:type="SOAP-ENC:Array" SOAP-
ENC:arrayType="unnamed_struct_use_soapval[1]"><item>
<name xsi:type="xsd:string">
VFpSPQYzAmhacwJSBncKZw47BmZWegh1XVpVfAMYBGkEPlFxAn9XdFoeByxVGwxvXGlUew==
</name><company xsi:type="xsd:string">
UlUCWAd4ASJcEgVhBW1ZNFxwUzcDYFpvU2leNg==</company><address xsi:type="xsd:string">
BhsHZQd4UHMBS1c7BmgIJAsXAWlbewoDBTgAdQM8ASNWMgY8AH0AiwhYVjxQMgl8DTQHbQNiDSJSclQy
</address><phone
xsi:type="xsd:string">BGMGMFExAjIONQc6VmcBOwhiVmNVbF87</phone><email xsi:type="xsd:string">
XHIPYFJnB21eFwJgUzdZOF1kB3JRNFhmAT1ROFBvACxVYQBhBTk=</email>
</item></output>
Gambar Paket pesan SOAP yang telah dienkripsi
Pada gambar pertama, dapat kita lihat bahwa pesan SOAP yang tidak dienkripsi
dapat dilihat data informasi yang sebenarnya yang terkandung dalam elemen body SOAP
tersebut. Informasi yang terkandung dalam pesan SOAP (baik pada elemen header atau
elemen body) seringkali merupakan data yang sensitif yang membutuhkan perlindungan
sehingga tidak dapat dibaca oleh seorang penyerang ketika menyadapnya melalui jalur
transport. Untuk mengatasi masalah ini, satu-satunya solusi adalah dengan mengenkripsi
informasi tersebut menjadi suatu bentuk data yang tidak dapat dikenali. Enkripsi
dilakukan sebelum paket pesan SOAP tersebut dikirim. Kemudian penerima yang
menerima pesan SOAP tersebut melakukan dekripsi terhadap pesan SOAP tersebut
sehingga dapat membacanya.
Berikut ini adalah langkah-langkah proses enkripsi pesan SOAP:
1. Tentukan algoritma enkripsi/dekripsi yang akan digunakan.
2. Tentukan kunci enkripsi (ekivalen pada server dan client)
3. Lakukan enkripsi terhadap semua data informasi yang akan dikirim dengan
menggunakan kunci enkripsi.
4. Lakukan penyusunan (serialisasi) paket pesan SOAP.
5. Kirimkan paket pesan SOAP yang telah dienkripsi
6. Penerima melakukan dekripsi pesan SOAP yang diterima dengan menggunakan kunci
enkripsi yang sama.
Implementasi Keamanan Web ServiceSetelah memahami konsep rancangan mekanisme pengamanan web service yang
akan kita bangun, langkah terakhir adalah mengimplementasikan hasil rancangan tersebut
ke dalam tahap pemrograman. Dalam mengimplementasiakan konsep rancangan ini, kita
akan akan menambahkan beberapa class security pada class NuSOAP. Class-class
security tersebut adalah:
1. Class SOAPSecurity ([soap_header])
Class SOAPSecurity berfungsi untuk mengolah dan melakukan parsing header
pesan SOAP ([soap_header]) yang berisi data informasi otentikasi yang dikirim oleh
aplikasi client. Fungsi-fungsi yang terdapat dalam class SOAPSecurity adalah:
readSecurityHeader
ParseAuthenticationParams
CheckSOAPAuthentication
2. Class GetAuthenticationParams
Class GetAuthenticationParams berfungsi untuk mengambil parameter
otentikasi yang telah diparsing.
3. Class Authentication
Clas Authentication berfungsi untuk mengolah parameter otentikasi SOAP
yang didapat dan menentukan status otentikasi tersebut. Fungsi-fungsi yang terdapat
dalam class SOAPSecurity adalah:
Authentication
ExecuteAuthentication
4. Class soapMD5Crypt
Class soapMD5Crypt berfungsi untuk melakukan proses enkripsi/dekripsi
pesan SOAP. Algoritma enkripsi yang digunakan adalah algoritma enkripsi MD5.
Fungsi-fungsi yang terdapat dalam class soapMD5Crypt adalah:
keyED
Encrypt
Decrypt
Berikut ini adalah kode skrip PHP class-class security di atas:
File: soap_security.php<?php
require_once('soap_encrypt.class.php');
class SOAPSecurity {
function SOAPSecurity($soap_header) {$this->soap_header = $soap_header;
}
function readSecurityHeader() {$data=$this->soap_header;$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $tags); xml_parser_free($parser);
foreach ($tags as $key=>$val) { if ($key == "wsse:UsernameToken") { $HeaderRanges = $val; for ($i=0; $i < count($HeaderRanges); $i+=2) { $offset = $HeaderRanges[$i] + 1; $len = $HeaderRanges[$i + 1] - $offset; $auth_param[] = $this->ParseAuthenticationParams(array_slice($values, $offset, $len)); } }
else continue; }
return $auth_param;}
function ParseAuthenticationParams($Avalues) { for ($i=0; $i < count($mvalues); $i++) $auth[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; return new GetAuthenticationParams($auth);
}
function CheckSOAPAuthentication($CryptKey) {$authParam = $this->readSecurityHeader();$objAuth = new Authentication(
$authParam[0]->Username,$authParam[0]->Password,$CryptKey);if (empty($authParam[0]->Username) | empty($authParam[0]->Password) )
return false;else
return $objAuth->ExecuteAuthentication();}
}
class GetAuthenticationParams { function GetAuthenticationParams ($aa) { foreach ($aa as $k=>$v) {
$exp=explode(":",$k);$k=$exp[1];
$this->$k = $v;}
}}
class Authentication {
function Authentication($username,$password, $CryptKey) {
$soapMD5Crypt = new soapMD5Crypt;$this->username = $soapMD5Crypt->Decrypt($username,$CryptKey);$this->password = $soapMD5Crypt->Decrypt($password,$CryptKey);
}
function ExecuteAuthentication() {$x_user = "123";$x_pass = "456";if ($this->username == $x_user & $this->password == $x_pass)
return true;else
return false;}
}
?>
File: soap_encrypt.php<?php
class soapMD5Crypt{
function keyED($txt,$encrypt_key) {$encrypt_key = md5($encrypt_key);$ctr=0;$tmp = "";for ($i=0;$i<strlen($txt);$i++){
if ($ctr==strlen($encrypt_key)) $ctr=0;$tmp.= substr($txt,$i,1)^substr($encrypt_key,$ctr,1);$ctr++;
}return $tmp;
}
function Encrypt($txt,$key) {srand((double)microtime()*1000000);$encrypt_key = md5(rand(0,32000));$ctr=0;$tmp = "";for ($i=0;$i<strlen($txt);$i++) {
if ($ctr==strlen($encrypt_key)) $ctr=0;$tmp.= substr($encrypt_key,$ctr,1) .(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));$ctr++;
}return base64_encode($this->keyED($tmp,$key));
}
function Decrypt($txt,$key) {$txt = $this->keyED(base64_decode($txt),$key);$tmp = "";for ($i=0;$i<strlen($txt);$i++){
$md5 = substr($txt,$i,1);$i++;$tmp.= (substr($txt,$i,1) ^ $md5);
}return $tmp;
}
function RandKey() {$randomPassword = "";srand((double)microtime()*1000000);for($i=0;$i<8;$i++) {
$randnumber = rand(48,120);while (($randnumber >= 58 && $randnumber <= 64) || ($randnumber >= 91
&& $randnumber <= 96)) {
$randnumber = rand(48,120);}$randomPassword .= chr($randnumber);
}return $randomPassword;
}
}?>
Setelah membuat file-file class security web service di atas, langkah selanjutnya
adalah melakukan modifikasi pada class library NuSOAP. File-file class security yang
telah dibuat disisipkan ke dalam class NuSOAP dengan menambahkan kode berikut:
Selanjutnya, tambahkan fungsi untuk memanggil class enkripsi SOAP
“soap_encrypt” ke dalam class “nusoap_base”:
Setelah menambahkan fungsi enkripsi, langkah selanjutnya adalah menambahkan
sebuah fungsi untuk menyusun header security ke dalam paket SOAP request yang akan
dikirimkan oleh aplikasi client, Fungsi ini diletakkan dalam class “soapclient”:
Seperti pada kode di atas, header SOAP menyisipkan data informasi otentikasi
SOAP yang telah dienkripsi sebelum dikirimkan ke aplikasi server.
function encrypt($val) {if (class_exists('soapMD5Crypt')) {
$soapEnc = new soapMD5Crypt;$outValue=$soapEnc->Encrypt($val,$this->CryptKey);return $outValue;
}else
return $val;}
function decrypt($val) {if (class_exists('soapMD5Crypt')) {
$soapDec = new soapMD5Crypt;$outValue=$soapDec->Decrypt($val,$this->CryptKey);return $outValue;
}else
return $val;}
/** include this if you want to use SOAP security **/require_once('soap_security.php');
function SetSOAPSecurityHeader($username=false,$password=false){if (class_exists('SOAPSecurity')) {
$username=$this->encrypt($username);$password=$this->encrypt($password);$auth = (
"<wsse:Security>"."<wsse:UsernameToken>"."<wsse:Username>$username</wsse:Username>"."<wsse:Password>$password</wsse:Password>"."</wsse:UsernameToken>"."</wsse:Security>"
);return $auth;
}}
Langkah selanjutnya adalah melakukan pembacaan data otentikasi SOAP yang
diterima dari aplikasi client sekaligus menentukan status otentikasi SOAP tersebut.
Modifikasi dilakukan pada fungsi “service” dalam class “soap_server”:
Setelah melakukan proses otentikasi SOAP, langkah selanjutnya adalah
melakukan enkripsi pada seluruh elemen body SOAP sebelum dikirimkan baik oleh
aplikasi server maupun client. Proses enkripsi ini dilakukan pada fungsi “serialize_val”
dalam class “nusoap_base”:
Setelah melakukan peoses enkripsi pada elemen body SOAP yang akan
dikirimkan, maka selanjutnya adalah melakukan dekripsi pada seluruh elemen header dan
body pada setiap pesan SOAP yang diterima. Proses dekripsi ini dilakukan pada fungsi
“character_data” dalam class “soap_parser”:
function serialize_val($val,$name=false,$type=false,$name_ns=false,$type_ns=false,$attributes=false,$use='encoded'){
if (!is_array($val)) $val = $this->encrypt($val);………………
}
function character_data($parser, $data){$pos = $this->depth_array[$this->depth];if ($this->xml_encoding=='UTF-8'){
if($this->decode_utf8){$data = utf8_decode($data);
}}
if (class_exists('SOAPSecurity')) $this->message[$pos]['cdata'] .= $this->decrypt($data);
else$this->message[$pos]['cdata'] .= $data;
if($this->status == 'header'){$this->responseHeaders .= $data;
} else {$this->document .= $data;
}}
$isAuthenticated = new SOAPSecurity($this->requestHeaders);If ($isAuthenticated->CheckSOAPAuthentication($this->CryptKey)) {
// teruskan layanan………………
}else{
// hentikan layanan………………
}