Tutorial Keamanan Layanan Web (WS) dengan Contoh SOAP
Apa itu Keamanan WS?
Keamanan WS adalah standar yang menangani keamanan ketika data dipertukarkan sebagai bagian dari layanan Web. Ini adalah fitur utama dalam SOAP yang membuatnya sangat populer untuk membuat layanan web.
Keamanan adalah fitur penting dalam aplikasi web apa pun. Karena hampir semua aplikasi web terekspos ke internet, selalu ada kemungkinan ancaman keamanan terhadap aplikasi web. Oleh karena itu, ketika mengembangkan aplikasi berbasis web, selalu disarankan untuk memastikan bahwa aplikasi dirancang dan dikembangkan dengan mempertimbangkan keamanan.
Ancaman dan Penanggulangan Keamanan
Untuk memahami ancaman keamanan yang dapat mengganggu aplikasi web, mari kita lihat skenario sederhana aplikasi web dan lihat cara kerjanya dari segi Keamanan.
Salah satu langkah keamanan yang tersedia untuk HTTP adalah protokol HTTPS. HTTPS adalah cara komunikasi yang aman antara klien dan server melalui web. HTTPS memanfaatkan lapisan Secure Sockets atau SSL untuk komunikasi yang aman. Baik klien maupun server akan memiliki sertifikat digital untuk mengidentifikasi dirinya sebagai asli ketika ada komunikasi yang terjadi antara klien dan server.
Dalam komunikasi HTTPS standar antara klien dan server, langkah-langkah berikut terjadi
- Klien mengirimkan permintaan ke server melalui sertifikat klien. Ketika server melihat sertifikat klien, server membuat catatan di sistem cache sehingga server mengetahui bahwa respons hanya boleh kembali ke klien ini.
- Server kemudian mengautentikasi dirinya ke klien dengan mengirimkan sertifikatnya. Ini memastikan bahwa klien berkomunikasi dengan server yang tepat.
- Semua komunikasi setelahnya antara klien dan server dienkripsi. Hal ini memastikan bahwa jika ada pengguna lain yang mencoba membobol keamanan dan mendapatkan data yang diperlukan, mereka tidak akan dapat membacanya karena data tersebut akan dienkripsi.
Namun jenis keamanan di atas tidak akan berfungsi di semua situasi. Mungkin ada saatnya klien dapat berbicara dengan banyak server. Contoh yang diberikan di bawah ini menunjukkan klien berbicara dengan database dan server web pada saat yang bersamaan. Dalam kasus seperti itu, tidak semua informasi dapat melewati protokol https.
Di sinilah SOAP bertindak untuk mengatasi hambatan tersebut dengan menerapkan spesifikasi Keamanan WS. Dengan spesifikasi ini, semua data terkait keamanan didefinisikan dalam elemen header SOAP.
Elemen header dapat berisi informasi yang disebutkan di bawah
- Jika pesan dalam badan SOAP telah ditandatangani dengan kunci keamanan apa pun, kunci tersebut dapat ditentukan dalam elemen header.
- Jika ada elemen dalam Badan SOAP yang dienkripsi, header akan berisi kunci enkripsi yang diperlukan sehingga pesan dapat didekripsi ketika mencapai tujuan.
Dalam lingkungan beberapa server, teknik autentikasi SOAP di atas membantu dengan cara berikut.
- Karena badan SOAP dienkripsi, maka hanya dapat didekripsi oleh server web yang menghosting layanan web. Hal ini karena bagaimana protokol SOAP dirancang.
- Misalkan jika pesan diteruskan ke server database dalam permintaan HTTP, pesan tersebut tidak dapat didekripsi karena database tidak memiliki mekanisme yang tepat untuk melakukannya.
- Hanya ketika permintaan benar-benar mencapai server Web sebagai protokol SOAP, pesan tersebut akan dapat diuraikan dan mengirimkan respons yang sesuai kembali ke klien.
Kita akan melihat di topik selanjutnya tentang bagaimana standar Keamanan WS dapat digunakan SOAP.
Standar Keamanan Layanan Web
Seperti yang dibahas di bagian sebelumnya, standar WS-Security berkisar pada memasukkan definisi keamanan dalam SOAP Header.
Kredensial di header SOAP dikelola dalam 2 cara.
Pertama, ini mendefinisikan elemen khusus yang disebut UsernameToken. Ini digunakan untuk meneruskan nama pengguna dan kata sandi ke layanan web.
Cara lainnya adalah dengan menggunakan Binary Token melalui BinarySecurityToken. Ini digunakan dalam situasi di mana teknik enkripsi seperti Kerberos atau X.509 digunakan.
Diagram di bawah ini menunjukkan alur cara kerja model keamanan di WS Security
Berikut adalah langkah-langkah yang terjadi pada alur kerja di atas
- Permintaan dapat dikirim dari klien layanan Web ke Layanan Token Keamanan. Layanan ini dapat berupa layanan web perantara yang secara khusus dibuat untuk menyediakan nama pengguna/kata sandi atau sertifikat ke layanan web SOAP yang sebenarnya.
- Token keamanan kemudian diteruskan ke klien layanan Web.
- Klien layanan Web kemudian memanggil layanan web, namun kali ini memastikan bahwa token keamanan tertanam dalam pesan SOAP.
- Layanan Web kemudian memahami pesan SOAP dengan token otentikasi dan kemudian dapat menghubungi layanan Token Keamanan untuk melihat apakah token keamanan itu asli atau tidak.
Cuplikan di bawah ini menunjukkan format bagian otentikasi yang merupakan bagian dari dokumen WSDL. Sekarang berdasarkan cuplikan di bawah ini, pesan SOAP akan berisi 2 elemen tambahan, satu adalah Nama Pengguna dan yang lainnya adalah Kata Sandi.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType></xs:element>
Ketika Pesan SOAP benar-benar diteruskan antara klien dan server, bagian dari pesan yang berisi kredensial pengguna akan terlihat seperti yang ditunjukkan di atas. Nama elemen wsse adalah elemen khusus yang diberi nama untuk SOAP dan berarti berisi informasi berbasis keamanan.
Bagaimana membangun layanan web yang aman
Sekarang mari kita lihat contoh keamanan layanan web SOAP. Kita akan membangun keamanan layanan web berdasarkan contoh yang ditunjukkan sebelumnya di bab SOAP dan akan menambahkan lapisan keamanan ke dalamnya.
Dalam contoh kita, kita akan membuat layanan web sederhana, yang akan digunakan untuk mengembalikan string ke aplikasi yang memanggil layanan web. Namun kali ini, ketika layanan web dipanggil, kredensial harus diberikan ke layanan panggilan. Mari ikuti langkah-langkah di bawah ini untuk membuat layanan web SOAP dan menambahkan definisi keamanan ke dalamnya.
Langkah 1) Langkah pertama adalah membuat yang kosong Asp.Net Aplikasi web. Dari Visual Studio 2013, klik opsi menu File->Proyek baru.
Setelah Anda mengklik opsi Proyek Baru, Visual Studio akan memberikan kotak dialog lain untuk memilih jenis proyek dan memberikan rincian yang diperlukan tentang proyek tersebut. Hal ini dijelaskan pada langkah berikutnya
Langkah 2) Pada langkah ini,
- Pastikan Anda memilih terlebih dahulu C# templat web untuk aplikasi web ASP.NET. Proyek harus berjenis ini agar dapat membuat proyek layanan web. Dengan memilih opsi ini, Visual Studio akan menjalankan langkah-langkah yang diperlukan untuk menambahkan berkas yang dibutuhkan oleh aplikasi berbasis web apa pun.
- Berikan nama untuk proyek Anda yang dalam kasus kami diberikan sebagai “layanan web.asmx.” Kemudian pastikan untuk memberikan lokasi, dimana file proyek akan disimpan.
Setelah selesai, Anda akan melihat berkas proyek yang dibuat di penjelajah solusi Anda di Visual Studio 2013.
Langkah 3) Pada langkah ini,
Kami akan menambahkan file layanan Web ke proyek kami
- Pertama Klik kanan pada file proyek seperti yang ditunjukkan di bawah ini
- Setelah Anda mengklik kanan pada file proyek, Anda memiliki kesempatan untuk memilih opsi “Tambah->Layanan Web (ASMX) untuk menambahkan file layanan web. Cukup berikan nama Layanan Tutorial untuk file nama layanan web.
Langkah di atas akan memunculkan kotak dialog, di mana seseorang dapat memasukkan nama file layanan web. Jadi di kotak dialog di bawah, masukkan nama TutorialService sebagai nama file.
Langkah 4) Tambahkan kode berikut ke file asmx Tutorial Service Anda. Potongan kode di bawah ini digunakan untuk menambahkan kelas kustom yang akan digunakan untuk mengubah Header SOAP saat pesan SOAP dibuat. Karena sekarang kita ingin menambahkan kredensial keamanan ke header SOAP, langkah ini diperlukan.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Penjelasan Kode: -
- Kami sekarang membuat kelas terpisah yang disebut AuthHeader yang bertipe Kelas SoapHeader. Kapan pun Anda ingin mengubah apa yang diteruskan di header SOAP, Anda perlu membuat kelas yang menggunakan kelas SoapHeader bawaan .Net. Dengan menyesuaikan SOAPheader, kami sekarang memiliki kemampuan untuk memberikan 'Nama Pengguna' dan 'Kata Sandi' ketika layanan web dipanggil.
- Kami kemudian mendefinisikan variabel 'Nama Pengguna' dan 'Kata Sandi' yang bertipe string. Mereka akan digunakan untuk menyimpan nilai nama pengguna dan kata sandi yang diteruskan ke layanan web.
Langkah 5) Sebagai langkah selanjutnya, kode berikut perlu ditambahkan ke yang sama File TutorialService.asmx. Kode ini sebenarnya mendefinisikan fungsi layanan web kami. Fungsi ini mengembalikan string “Ini adalah layanan Web Guru99” ke klien. Namun kali ini, string hanya akan dikembalikan jika aplikasi klien meneruskan kredensial ke layanan web.
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } eise return "This is a Guru99 Web service"; }
Penjelasan Kode: -
- Di sini, kita membuat objek kelas AuthHeader yang dibuat pada langkah sebelumnya. Objek ini akan diteruskan ke kami Layanan Web Guru99 di mana nama pengguna dan kata sandi dapat diperiksa dengan cermat.
- Atribut [SoapHeader] sekarang digunakan untuk menentukan bahwa ketika layanan Web dipanggil, nama pengguna dan kata sandi harus diteruskan.
- Dalam blok kode ini, kami sebenarnya memeriksa nama pengguna dan kata sandi yang diberikan saat layanan web dipanggil. Jika Nama Pengguna sama dengan “Guru99” dan kata sandi sama dengan “Kata Sandi Guru99” maka pesan “Ini adalah layanan Web Guru99” diteruskan ke klien. Jika tidak, kesalahan akan dikirim ke klien jika id pengguna dan kata sandi salah diberikan.
Jika kode berhasil dieksekusi, Output berikut akan ditampilkan saat Anda menjalankan kode di peramban.
Keluaran:
Output di atas ditampilkan ketika program dijalankan, yang berarti layanan Web sekarang tersedia. Mari kita klik pada Layanan Descripttautan ion.
Dari deskripsi layanan, Anda sekarang dapat melihat bahwa nama pengguna dan kata sandi adalah elemen dari wsdl mengajukan. Parameter ini perlu dikirim saat layanan web dipanggil.
Praktik Terbaik Keamanan Layanan Web
Berikut ini adalah pertimbangan keamanan yang harus diperhatikan saat bekerja dengan layanan Web
1. Audit dan Manajemen Log – Gunakan pencatatan aplikasi untuk mencatat semua permintaan, yang datang ke layanan web. Ini memberikan laporan rinci tentang siapa yang telah memanggil layanan web dan dapat membantu dalam analisis dampak jika terjadi pelanggaran keamanan.
2. Alur panggilan ke layanan web – Coba perhatikan alur panggilan di layanan web. Secara default, aplikasi dapat memanggil beberapa permintaan layanan web dengan token Otentikasi yang diteruskan di antara layanan web ini. Semua panggilan antar layanan web perlu dipantau dan dicatat.
3. Informasi Sensitif – Jangan sertakan informasi sensitif dalam entri log Anda seperti kata sandi atau nomor kartu kredit atau informasi rahasia lainnya. Jika ada kejadian yang memiliki informasi ini, kejadian tersebut harus dibuang sebelum dicatat.
4. Lacak Bisnis Operations – Lacak operasi bisnis yang signifikan. Misalnya, lengkapi aplikasi Anda untuk mencatat akses ke metode sensitif dan logika bisnis. Kita ambil contoh aplikasi belanja online. Ada beberapa langkah dalam aplikasi umum seperti memilih barang yang akan dibeli, memasukkan barang ke dalam keranjang, dan kemudian pembelian akhir. Seluruh alur kerja bisnis ini perlu dilacak oleh layanan web.
5. Otentikasi yang Benar – Otentikasi adalah mekanisme di mana klien dapat menetapkan identitas mereka dengan layanan web menggunakan serangkaian kredensial tertentu yang dapat membuktikan identitas tersebut. Seseorang tidak boleh menyimpan kredensial pengguna, dan karenanya, jika WS Security digunakan untuk memanggil layanan web, harus dicatat bahwa layanan web tidak boleh menyimpan kredensial yang dikirim dalam header SOAP. Ini harus dibuang oleh layanan web.
Kesimpulan
- SOAP menyediakan lapisan tambahan yang disebut WS Security untuk memberikan keamanan tambahan ketika panggilan dilakukan ke layanan Web.
- Keamanan WS dapat dipanggil dengan nama pengguna atau kata sandi sederhana atau dapat digunakan dengan sertifikat Biner untuk otentikasi
- Kita telah melihatnya di .Bersih kita dapat menyesuaikan layanan Web agar nama pengguna dan kata sandi diteruskan sebagai bagian dari elemen header SOAP.