Tutorial Keamanan Web Service (WS) dengan Contoh SOAP

Daftar Isi:

Anonim

Apa itu Keamanan WS?

WS Security adalah standar yang membahas keamanan saat 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 terpapar ke internet, selalu ada kemungkinan ancaman keamanan pada aplikasi web. Karenanya, ketika mengembangkan aplikasi berbasis web, selalu disarankan untuk memastikan bahwa aplikasi dirancang dan dikembangkan dengan mempertimbangkan keamanan.

Dalam tutorial ini, Anda akan belajar-

  • Ancaman dan Tindakan Keamanan
  • Standar Keamanan Layanan Web
  • Bagaimana membangun layanan web yang aman
  • Praktik Terbaik Keamanan Layanan Web

Ancaman dan Tindakan Keamanan

Untuk memahami ancaman keamanan yang dapat memusuhi aplikasi web, mari kita lihat skenario sederhana dari aplikasi web dan lihat cara kerjanya dalam kaitannya dengan 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 Soket Aman atau SSL untuk komunikasi yang aman. Baik klien dan server akan memiliki sertifikat digital untuk mengidentifikasi diri mereka sebagai asli ketika komunikasi terjadi antara klien dan server.

Dalam komunikasi HTTPS standar antara klien dan server, langkah-langkah berikut terjadi

  1. Klien mengirimkan permintaan ke server melalui sertifikat klien. Saat server melihat sertifikat klien, ia membuat catatan di sistem cache-nya sehingga ia tahu bahwa respons hanya boleh kembali ke klien ini.
  2. Server kemudian mengautentikasi dirinya sendiri ke klien dengan mengirimkan sertifikatnya. Ini memastikan bahwa klien berkomunikasi dengan server yang benar.
  3. Semua komunikasi selanjutnya antara klien dan server dienkripsi. Ini memastikan bahwa jika ada pengguna lain yang mencoba membobol keamanan dan mendapatkan data yang diperlukan, mereka tidak akan dapat membacanya karena akan dienkripsi.

Tetapi jenis keamanan di atas tidak akan berfungsi di semua situasi. Ada saatnya ketika klien dapat berbicara ke beberapa server. Contoh yang diberikan di bawah ini menunjukkan klien berbicara ke database dan server web pada satu waktu. Dalam kasus seperti itu, tidak semua informasi dapat melewati protokol https.

Di sinilah SOAP bertindak untuk mengatasi hambatan tersebut dengan memiliki spesifikasi Keamanan WS. Dengan spesifikasi ini, semua data terkait keamanan didefinisikan dalam elemen header SOAP.

Elemen header dapat berisi informasi yang disebutkan di bawah ini

  1. Jika pesan dalam badan SOAP telah ditandatangani dengan kunci keamanan apa pun, kunci tersebut dapat ditentukan di elemen header.
  2. Jika ada elemen dalam SOAP Body dienkripsi, header akan berisi kunci enkripsi yang diperlukan sehingga pesan dapat didekripsi saat mencapai tujuan.

Dalam beberapa lingkungan server, teknik otentikasi SOAP di atas membantu dengan cara berikut.

  • Karena badan SOAP dienkripsi, itu hanya akan dapat didekripsi oleh server web yang menghosting layanan web. Ini karena bagaimana protokol SOAP dirancang.
  • Misalkan jika pesan diteruskan ke server database dalam permintaan HTTP, itu tidak dapat didekripsi karena database tidak memiliki mekanisme yang tepat untuk melakukannya.
  • Hanya ketika permintaan benar-benar mencapai server Web sebagai protokol SOAP, itu akan dapat menguraikan pesan dan mengirim tanggapan yang sesuai kembali ke klien.

Kita akan melihat di topik selanjutnya tentang bagaimana standar Keamanan WS dapat digunakan untuk SOAP.

Standar Keamanan Layanan Web

Seperti yang dibahas di bagian sebelumnya, standar WS-Security berkisar pada definisi keamanan yang disertakan dalam SOAP Header.

Kredensial di header SOAP dikelola dengan 2 cara.

Pertama, ini mendefinisikan elemen khusus yang disebut UsernameToken. Ini digunakan untuk mengirimkan 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 aliran cara kerja model keamanan di WS Security

Di bawah ini adalah langkah-langkah yang terjadi pada alur kerja di atas

  1. Permintaan dapat dikirim dari klien layanan Web ke Layanan Token Keamanan. Layanan ini dapat menjadi layanan web perantara yang secara khusus dibangun untuk memberikan nama pengguna / kata sandi atau sertifikat ke layanan web SOAP yang sebenarnya.
  2. Token keamanan kemudian diteruskan ke klien layanan Web.
  3. Klien layanan Web kemudian memanggil layanan web, tetapi, kali ini, memastikan bahwa token keamanan tertanam dalam pesan SOAP.
  4. 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 potongan di bawah ini, pesan SOAP akan berisi 2 elemen tambahan, satu adalah Nama Pengguna dan yang lainnya adalah Kata Sandi.

Ketika Pesan SOAP benar-benar diteruskan antara klien dan server, bagian dari pesan yang berisi kredensial pengguna bisa terlihat seperti yang ditunjukkan di atas. Nama elemen wsse adalah elemen khusus bernama didefinisikan untuk SOAP dan berarti mengandung informasi berbasis keamanan.

Bagaimana membangun layanan web yang aman

Sekarang mari kita lihat contoh keamanan layanan web SOAP. Kami akan membangun keamanan layanan web berdasarkan contoh yang ditunjukkan sebelumnya di bab SOAP dan akan menambahkan lapisan keamanan ke dalamnya.

Dalam contoh kami, kami akan membuat layanan web sederhana, yang akan digunakan untuk mengembalikan string ke aplikasi yang memanggil layanan web. Tapi kali ini, saat layanan web dipanggil, kredensial perlu diberikan ke layanan panggilan. Mari ikuti langkah-langkah di bawah ini untuk membuat layanan web SOAP kami dan menambahkan definisi keamanan padanya.

Langkah 1) Langkah pertama adalah membuat aplikasi Web Asp.Net kosong. Dari Visual Studio 2013, klik opsi menu File-> New project.

Setelah Anda mengklik opsi Proyek Baru, Visual Studio kemudian akan memberi Anda kotak dialog lain untuk memilih jenis proyek dan memberikan rincian proyek yang diperlukan. Ini dijelaskan pada langkah selanjutnya

Langkah 2) Pada langkah ini,

  1. Pastikan Anda terlebih dahulu memilih template web C # untuk aplikasi ASP.NET Web. Proyek harus jenis ini untuk membuat proyek layanan web. Dengan memilih opsi ini, Visual Studio kemudian akan melakukan langkah-langkah yang diperlukan untuk menambahkan file yang diperlukan yang diperlukan oleh aplikasi berbasis web.
  2. Beri nama untuk proyek Anda yang dalam kasus kami telah diberikan sebagai " webservice.asmx " . Kemudian pastikan untuk memberikan lokasi, di mana file proyek akan disimpan.

Setelah selesai, Anda akan melihat file 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

  1. Klik kanan pertama pada file proyek seperti yang ditunjukkan di bawah ini
  1. Setelah Anda mengklik kanan pada file proyek, Anda memiliki kesempatan untuk memilih opsi "Add-> Web Service (ASMX) untuk menambahkan file layanan web. Cukup berikan nama Layanan Tutorial untuk file nama layanan web.

Langkah di atas akan menampilkan kotak dialog, di mana seseorang dapat memasukkan nama file layanan web. Jadi di kotak dialog di bawah ini, masukkan nama TutorialService sebagai nama file.

Langkah 4) Tambahkan kode berikut ke file asmx Layanan Tutorial Anda. Potongan kode di bawah ini digunakan untuk menambahkan kelas kustom yang akan digunakan untuk mengubah Header SOAP ketika pesan SOAP dibuat. Karena sekarang kami 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: -

  1. Kami sekarang membuat kelas terpisah yang disebut AuthHeader yang merupakan kelas tipe SoapHeader . Kapan pun Anda ingin mengubah apa yang diteruskan di header SOAP, Anda perlu membuat kelas yang menggunakan kelas SoapHeader bawaan dari .Net. Dengan menyesuaikan SOAPheader, kita sekarang memiliki kemampuan untuk memasukkan 'Username' dan 'Password' ketika layanan web dipanggil.
  2. Kami kemudian mendefinisikan variabel 'UserName' dan 'Password' yang bertipe string. Mereka akan digunakan untuk menyimpan nilai nama pengguna dan kata sandi yang dikirimkan ke layanan web.

Langkah 5) Sebagai langkah selanjutnya, kode berikut perlu ditambahkan ke file TutorialService.asmx yang sama . Kode ini sebenarnya mendefinisikan fungsi layanan web kami. Fungsi ini mengembalikan string "Ini adalah layanan Web Guru99" ke klien. Tapi kali ini, string hanya akan dikembalikan jika aplikasi klien memberikan 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);}eisereturn "This is a Guru99 Web service";}

Penjelasan Kode: -

  1. Di sini, kami membuat objek kelas AuthHeader yang dibuat pada langkah sebelumnya. Objek ini akan diteruskan ke Guru99Webservice kami di mana nama pengguna dan kata sandi dapat diperiksa dengan cermat.
  2. Atribut [SoapHeader] digunakan sekarang untuk menentukan bahwa ketika layanan Web dipanggil, nama pengguna dan kata sandi harus diberikan.
  3. Dalam blok kode ini, kami sebenarnya memeriksa nama pengguna dan kata sandi yang dilewatkan saat layanan web dipanggil. Jika Username sama dengan "Guru99" dan password sama dengan "Guru99Password" maka pesan "Ini adalah layanan Web Guru99" diteruskan ke klien. Jika tidak, kesalahan akan dikirim ke klien jika id pengguna dan kata sandi yang salah dilewatkan.

Jika kode berhasil dijalankan, Output berikut akan ditampilkan saat Anda menjalankan kode di browser.

Keluaran:

Output di atas ditampilkan ketika program dijalankan, yang berarti bahwa layanan Web sekarang tersedia. Mari klik tautan Deskripsi Layanan.

Dari deskripsi layanan, Anda sekarang akan dapat melihat bahwa nama pengguna dan kata sandi adalah elemen dari file WSDL. Parameter ini perlu dikirim saat layanan web dipanggil.

Praktik Terbaik Keamanan Layanan Web

Berikut 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 menjalankan layanan web dan dapat membantu dalam Analisis dampak jika terjadi pelanggaran keamanan.

  2. Alur panggilan ke layanan web - Coba perhatikan aliran panggilan di layanan web. Secara default, aplikasi dapat memanggil beberapa permintaan layanan web dengan token Autentikasi yang diteruskan di antara layanan web ini. Semua panggilan antar layanan web perlu dipantau dan dicatat.

  3. Informasi Sensitif - Jangan menyertakan informasi sensitif dalam entri log Anda seperti kata sandi atau nomor kartu kredit atau informasi rahasia lainnya. Jika ada acara yang memiliki informasi ini, itu perlu dibuang sebelum masuk.

  4. Lacak Operasi Bisnis - Lacak operasi bisnis yang signifikan. Misalnya, lengkapi aplikasi Anda untuk merekam akses ke metode sensitif dan logika bisnis. Mari kita ambil contoh aplikasi belanja online. Ada beberapa langkah dalam aplikasi biasa seperti memilih item yang akan dibeli, item yang dimuat ke dalam keranjang, dan kemudian pembelian terakhir. Seluruh alur kerja bisnis ini perlu dilacak oleh layanan web.

  5. Otentikasi yang Tepat - Otentikasi adalah mekanisme di mana klien dapat menetapkan identitas mereka dengan layanan web menggunakan sekumpulan 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 di header SOAP. Ini harus dibuang oleh layanan web.

Ringkasan

  • SOAP menyediakan lapisan tambahan yang disebut Keamanan WS untuk memberikan keamanan tambahan saat 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 melihat bahwa di .Net kita dapat menyesuaikan layanan Web agar nama pengguna dan kata sandi dilewatkan sebagai bagian dari elemen header SOAP.