Bagikan melalui


Mengamankan Layanan

Keamanan layanan Windows Communication Foundation (WCF) terdiri dari dua persyaratan utama: keamanan transfer dan otorisasi. (Persyaratan ketiga, audit peristiwa keamanan, dijelaskan dalam Audit.) Singkatnya, keamanan transfer mencakup autentikasi (memverifikasi identitas layanan dan klien), kerahasiaan (enkripsi pesan), dan integritas (penandatanganan digital untuk mendeteksi perubahan). Otorisasi adalah kontrol akses ke sumber daya, misalnya, yang hanya memungkinkan pengguna istimewa untuk membaca file. Menggunakan fitur WCF, dua persyaratan utama mudah diimplementasikan.

Dengan pengecualian BasicHttpBinding kelas (atau <elemen dasarHttpBinding> dalam konfigurasi), keamanan transfer diaktifkan secara default untuk semua pengikatan yang telah ditentukan sebelumnya. Topik di bagian ini mencakup dua skenario dasar: menerapkan keamanan transfer dan otorisasi pada layanan intranet yang dihosting di Internet Information Services (IIS), dan menerapkan keamanan transfer dan otorisasi pada layanan yang dihosting di IIS.

Dasar-Dasar Keamanan

Keamanan bergantung pada kredensial. Kredensial membuktikan bahwa entitas adalah siapa yang diklaimnya. ( Entitas dapat berupa seseorang, proses perangkat lunak, perusahaan, atau apa pun yang dapat diotorisasi.) Misalnya, klien layanan membuat klaimidentitas, dan kredensial membuktikan klaim itu dengan cara tertentu. Dalam skenario umum, pertukaran kredensial terjadi. Pertama, layanan membuat klaim identitasnya dan membuktikannya kepada klien dengan kredensial. Sebaliknya, klien membuat klaim identitas dan menyajikan kredensial ke layanan. Jika kedua belah pihak mempercayai kredensial pihak lain, maka konteks aman dapat ditetapkan di mana semua pesan ditukar dengan kerahasiaan, dan semua pesan ditandatangani untuk melindungi integritas mereka. Setelah layanan menetapkan identitas klien, layanan kemudian dapat mencocokkan klaim dalam kredensial dengan peran atau keanggotaan dalam grup. Dalam kedua kasus, menggunakan peran atau grup tempat klien berada, layanan mengotorisasi klien untuk melakukan serangkaian operasi terbatas berdasarkan peran atau hak istimewa grup.

Mekanisme Keamanan Windows

Jika klien dan komputer layanan berada di domain Windows yang mengharuskan keduanya untuk masuk ke jaringan, kredensial disediakan oleh infrastruktur Windows. Dalam hal ini, kredensial ditetapkan ketika pengguna komputer masuk ke jaringan. Setiap pengguna dan setiap komputer pada jaringan harus divalidasi sebagai milik sekumpulan pengguna dan komputer tepercaya. Pada sistem Windows, setiap pengguna dan komputer tersebut juga dikenal sebagai entitas keamanan.

Pada domain Windows yang didukung oleh pengontrol Kerberos , pengontrol Kerberos menggunakan skema berdasarkan pemberian tiket kepada setiap prinsip keamanan. Tiket yang diberikan pengontrol dipercaya oleh pemberi tiket lain dalam sistem. Setiap kali entitas mencoba melakukan beberapa operasi atau mengakses sumber daya (seperti file atau direktori pada komputer), tiket diperiksa untuk validitasnya dan, jika lulus, prinsipal diberikan tiket lain untuk operasi tersebut. Metode pemberian tiket ini lebih efisien daripada alternatif mencoba memvalidasi prinsipal untuk setiap operasi.

Mekanisme lama yang kurang aman yang digunakan pada domain Windows adalah NT LAN Manager (NTLM). Dalam kasus di mana Kerberos tidak dapat digunakan (biasanya di luar domain Windows, seperti dalam grup kerja), NTLM dapat digunakan sebagai alternatif. NTLM juga tersedia sebagai opsi keamanan untuk IIS.

Pada sistem Windows, otorisasi berfungsi dengan menetapkan setiap komputer dan pengguna ke serangkaian peran dan grup. Misalnya, setiap komputer Windows harus disiapkan dan dikontrol oleh seseorang (atau sekelompok orang) dalam peran administrator. Peran lain adalah pengguna, yang memiliki serangkaian izin yang jauh lebih dibatasi. Selain ditetapkan peran, pengguna juga ditetapkan ke grup. Grup memungkinkan beberapa pengguna untuk melakukan dalam peran yang sama. Oleh karena itu, dalam praktiknya, komputer Windows dikelola dengan menetapkan pengguna ke grup. Misalnya, beberapa pengguna dapat ditetapkan ke grup pengguna komputer, dan sekumpulan pengguna yang jauh lebih dibatasi dapat ditetapkan ke grup administrator. Pada komputer lokal, administrator juga dapat membuat grup baru dan menetapkan pengguna lain (atau bahkan grup lain) ke grup.

Pada komputer yang menjalankan Windows, setiap folder dalam direktori dapat dilindungi. Artinya, Anda dapat memilih folder dan mengontrol siapa yang dapat mengakses file, dan apakah mereka dapat menyalin file atau tidak, atau (dalam kasus yang paling istimewa) mengubah file, menghapus file, atau menambahkan file ke folder. Ini dikenal sebagai kontrol akses, dan mekanisme untuk itu dikenal sebagai daftar kontrol akses (ACL). Saat membuat ACL, Anda dapat menetapkan hak istimewa akses ke grup atau grup apa pun, serta anggota individual domain.

Infrastruktur WCF dirancang untuk menggunakan mekanisme keamanan Windows ini. Oleh karena itu, jika Anda membuat layanan yang disebarkan pada intranet, dan yang kliennya dibatasi untuk anggota domain Windows, keamanan mudah diterapkan. Hanya pengguna yang valid yang dapat masuk ke domain. Setelah pengguna masuk, pengontrol Kerberos memungkinkan setiap pengguna untuk membuat konteks aman dengan komputer atau aplikasi lain. Pada komputer lokal, grup dapat dengan mudah dibuat, dan saat melindungi folder tertentu, grup tersebut dapat digunakan untuk menetapkan hak istimewa akses di komputer.

Menerapkan Keamanan Windows pada Layanan Intranet

Untuk mengamankan aplikasi yang berjalan secara eksklusif pada domain Windows, Anda dapat menggunakan pengaturan keamanan default dari WSHttpBinding atau pengikatan NetTcpBinding . Secara default, siapa pun di domain Windows yang sama dapat mengakses layanan WCF. Karena pengguna tersebut telah masuk ke jaringan, mereka tepercaya. Pesan antara layanan dan klien dienkripsi untuk kerahasiaan dan ditandatangani untuk integritas. Untuk informasi selengkapnya tentang cara membuat layanan yang menggunakan keamanan Windows, lihat Cara: Mengamankan Layanan dengan Kredensial Windows.

Otorisasi Menggunakan Kelas PrincipalPermissionAttribute

Jika Anda perlu membatasi akses sumber daya di komputer, cara term mudah adalah dengan menggunakan PrincipalPermissionAttribute kelas . Atribut ini memungkinkan Anda membatasi pemanggilan operasi layanan dengan menuntut agar pengguna berada dalam grup atau peran Windows tertentu, atau menjadi pengguna tertentu. Untuk informasi selengkapnya, lihat Cara: Membatasi Akses dengan Kelas PrincipalPermissionAttribute.

Peniruan

Peniruan adalah mekanisme lain yang dapat Anda gunakan untuk mengontrol akses ke sumber daya. Secara default, layanan yang dihosting oleh IIS akan berjalan di bawah identitas akun ASPNET. Akun ASPNET hanya dapat mengakses sumber daya yang memiliki izin. Namun, dimungkinkan untuk mengatur ACL untuk folder guna mengecualikan akun layanan ASPNET, tetapi memungkinkan identitas lain tertentu untuk mengakses folder. Pertanyaannya kemudian menjadi cara mengizinkan pengguna tersebut mengakses folder jika akun ASPNET tidak diizinkan untuk melakukannya. Jawabannya adalah menggunakan peniruan identitas, di mana layanan diizinkan untuk menggunakan kredensial klien untuk mengakses sumber daya tertentu. Contoh lain adalah saat mengakses database SQL Server yang hanya memiliki izin pengguna tertentu. Untuk informasi selengkapnya tentang menggunakan peniruan identitas, lihat Cara: Meniru Klien pada Layanan dan Delegasi dan Peniruan Identitas.

Keamanan di Internet

Keamanan di Internet terdiri dari persyaratan yang sama dengan keamanan pada intranet. Layanan perlu menyajikan kredensialnya untuk membuktikan keasliannya, dan klien perlu membuktikan identitas mereka ke layanan. Setelah identitas klien terbukti, layanan dapat mengontrol berapa banyak akses yang dimiliki klien ke sumber daya. Namun, karena sifat heterogen Internet, kredensial yang disajikan berbeda dari yang digunakan pada domain Windows. Sedangkan pengontrol Kerberos menangani autentikasi pengguna pada domain dengan tiket untuk kredensial, di Internet layanan dan klien mengandalkan beberapa cara berbeda untuk menyajikan kredensial. Tujuan dari topik ini, bagaimanapun, adalah untuk menyajikan pendekatan umum yang memungkinkan Anda membuat layanan WCF yang dapat diakses di Internet.

Menggunakan IIS dan ASP.NET

Persyaratan keamanan Internet, dan mekanisme untuk menyelesaikan masalah tersebut, bukanlah hal baru. IIS adalah server Web Microsoft untuk Internet dan memiliki banyak fitur keamanan yang mengatasi masalah tersebut; selain itu, ASP.NET menyertakan fitur keamanan yang dapat digunakan layanan WCF. Untuk memanfaatkan fitur keamanan ini, host layanan WCF di IIS.

Menggunakan Keanggotaan ASP.NET dan Penyedia Rol

ASP.NET mencakup keanggotaan dan penyedia peran. Penyedia adalah database pasangan nama pengguna/kata sandi untuk mengautentikasi penelepon yang juga memungkinkan Anda menentukan hak akses setiap pemanggil. Dengan WCF, Anda dapat dengan mudah menggunakan keanggotaan dan penyedia peran yang sudah ada sebelumnya melalui konfigurasi. Untuk contoh aplikasi yang menunjukkan hal ini, lihat sampel Keanggotaan dan Penyedia Peran .

Kredensial yang Digunakan oleh IIS

Tidak seperti domain Windows yang didukung oleh pengontrol Kerberos, Internet adalah lingkungan tanpa satu pengontrol untuk mengelola jutaan pengguna yang masuk kapan saja. Sebaliknya, kredensial di Internet paling sering dalam bentuk sertifikat X.509 (juga dikenal sebagai Secure Sockets Layer, atau SSL, sertifikat). Sertifikat ini biasanya dikeluarkan oleh otoritas sertifikasi, yang dapat menjadi perusahaan pihak ketiga yang menjamin keaslian sertifikat dan orang yang telah dikeluarkannya. Untuk mengekspos layanan Anda di Internet, Anda juga harus menyediakan sertifikat tepercaya tersebut untuk mengautentikasi layanan Anda.

Pertanyaan muncul pada saat ini, bagaimana Anda mendapatkan sertifikat seperti itu? Salah satu pendekatannya adalah pergi ke otoritas sertifikasi pihak ketiga, seperti Authenticode atau VeriSign, ketika Anda siap untuk menyebarkan layanan Anda, dan membeli sertifikat untuk layanan Anda. Namun, jika Anda berada dalam fase pengembangan dengan WCF dan belum siap untuk berkomitmen untuk membeli sertifikat, alat, dan teknik yang ada untuk membuat sertifikat X.509 yang dapat Anda gunakan untuk mensimulasikan penyebaran produksi. Untuk informasi selengkapnya, lihat Bekerja dengan Sertifikat.

Mode Keamanan

Pemrograman keamanan WCF memerlukan beberapa poin keputusan penting. Salah satu yang paling mendasar adalah pilihan mode keamanan. Dua mode keamanan utama adalah mode transportasi dan mode pesan.

Mode ketiga, yang menggabungkan semantik dari kedua mode utama, adalah transportasi dengan mode kredensial pesan.

Mode keamanan menentukan bagaimana pesan diamankan, dan setiap pilihan memiliki kelebihan dan kekurangan, seperti yang dijelaskan di bawah ini. Untuk informasi selengkapnya tentang mengatur mode keamanan, lihat Cara: Mengatur Mode Keamanan.

Mode Transportasi

Ada beberapa lapisan antara jaringan dan aplikasi. Salah satunya adalah lapisan transportasi *,* yang mengelola transfer pesan antar titik akhir. Untuk tujuan saat ini, hanya diperlukan agar Anda memahami bahwa WCF menggunakan beberapa protokol transportasi, yang masing-masing dapat mengamankan transfer pesan. (Untuk informasi selengkapnya tentang transportasi, lihat Transportasi.)

Protokol yang umum digunakan adalah HTTP; lainnya adalah TCP. Masing-masing protokol ini dapat mengamankan transfer pesan dengan mekanisme (atau mekanisme) khusus untuk protokol. Misalnya, protokol HTTP diamankan menggunakan SSL melalui HTTP, biasanya disingkat sebagai "HTTPS." Dengan demikian, ketika Anda memilih mode transportasi untuk keamanan, Anda memilih untuk menggunakan mekanisme seperti yang ditentukan oleh protokol. Misalnya, jika Anda memilih WSHttpBinding kelas dan mengatur mode keamanannya ke Transportasi, Anda memilih SSL melalui HTTP (HTTPS) sebagai mekanisme keamanan. Keuntungan dari mode transportasi adalah lebih efisien daripada mode pesan karena keamanan terintegrasi pada tingkat yang relatif rendah. Saat menggunakan mode transport, mekanisme keamanan harus diimplementasikan sesuai dengan spesifikasi untuk transport, sehingga pesan dapat mengalir dengan aman hanya dari titik ke titik melalui transport tersebut.

Mode Pesan

Sebaliknya, mode pesan menyediakan keamanan dengan menyertakan data keamanan sebagai bagian dari setiap pesan. Menggunakan header keamanan XML dan SOAP, kredensial dan data lain yang diperlukan untuk memastikan integritas dan kerahasiaan pesan disertakan dengan setiap pesan. Setiap pesan menyertakan data keamanan, sehingga memberikan dampak pada kinerja karena setiap pesan harus diproses satu per satu. (Dalam mode transportasi, setelah lapisan transportasi diamankan, semua pesan mengalir bebas.) Namun, keamanan pesan memiliki satu keuntungan daripada keamanan transportasi: keamanan ini lebih fleksibel. Artinya, persyaratan keamanan tidak ditentukan oleh transportasi. Anda dapat menggunakan semua jenis kredensial klien untuk mengamankan pesan. (Dalam mode transportasi, protokol transportasi menentukan jenis kredensial klien yang dapat Anda gunakan.)

Transportasi dengan Kredensial Pesan

Mode ketiga menggabungkan yang terbaik dari keamanan transportasi dan pesan. Dalam mode ini, keamanan transportasi digunakan untuk memastikan kerahasiaan dan integritas setiap pesan secara efisien. Pada saat yang sama, setiap pesan menyertakan data kredensialnya, yang memungkinkan pesan diautentikasi. Dengan autentikasi, otorisasi juga dapat diimplementasikan. Dengan mengautentikasi pengirim, akses ke sumber daya dapat diberikan (atau ditolak) sesuai dengan identitas pengirim.

Menentukan Jenis Kredensial Klien dan Nilai Kredensial

Setelah memilih mode keamanan, Anda mungkin juga ingin menentukan jenis kredensial klien. Jenis kredensial klien menentukan jenis apa yang harus digunakan klien untuk mengautentikasi dirinya sendiri ke server.

Namun, tidak semua skenario memerlukan jenis kredensial klien. Menggunakan SSL melalui HTTP (HTTPS), layanan mengautentikasi dirinya sendiri ke klien. Sebagai bagian dari autentikasi ini, sertifikat layanan dikirim ke klien dalam proses yang disebut negosiasi. Transportasi yang diamankan SSL memastikan bahwa semua pesan bersifat rahasia.

Jika Anda membuat layanan yang mengharuskan klien diautentikasi, pilihan jenis kredensial klien Anda bergantung pada transportasi dan mode yang dipilih. Misalnya, menggunakan transport HTTP dan memilih mode transport memberi Anda beberapa pilihan, seperti Basic, Digest, dan lainnya. (Untuk informasi selengkapnya tentang jenis kredensial ini, lihat Memahami Autentikasi HTTP.)

Jika Anda membuat layanan pada domain Windows yang hanya akan tersedia untuk pengguna jaringan lain, yang paling mudah digunakan adalah jenis kredensial klien Windows. Namun, Anda mungkin juga perlu menyediakan layanan dengan sertifikat. Ini ditunjukkan dalam Cara: Tentukan Nilai Kredensial Klien.

Nilai Kredensial

Nilai kredensial adalah kredensial aktual yang digunakan layanan. Setelah menentukan jenis kredensial, Anda mungkin juga perlu mengonfigurasi layanan Anda dengan kredensial aktual. Jika Anda telah memilih Windows (dan layanan akan berjalan pada domain Windows), maka Anda tidak menentukan nilai kredensial yang sebenarnya.

Identitas

Di WCF, istilah identitas memiliki arti yang berbeda dengan server dan klien. Singkatnya, saat menjalankan layanan, identitas ditetapkan ke konteks keamanan setelah autentikasi. Untuk melihat identitas sebenarnya, periksa properti WindowsIdentity dan PrimaryIdentity dari kelas ServiceSecurityContext. Untuk informasi selengkapnya, lihat Cara: Memeriksa Konteks Keamanan.

Sebaliknya, pada klien, identitas digunakan untuk memvalidasi layanan. Pada waktu desain, pengembang klien dapat mengatur <elemen identitas> ke nilai yang diperoleh dari layanan. Pada runtime, klien memeriksa nilai elemen terhadap identitas aktual layanan. Jika pemeriksaan gagal, klien mengakhiri komunikasi. Nilainya dapat berupa nama prinsipal pengguna (UPN) jika layanan berjalan di bawah identitas pengguna tertentu atau nama perwakilan layanan (SPN) jika layanan berjalan di bawah akun komputer. Untuk informasi selengkapnya, lihat Identitas dan Autentikasi Layanan. Kredensial juga bisa berupa sertifikat, atau bidang yang ditemukan pada sertifikat yang mengidentifikasi sertifikat.

Tingkat Perlindungan

Properti ProtectionLevel terjadi pada beberapa kelas atribut (seperti ServiceContractAttribute dan OperationContractAttribute kelas). Tingkat perlindungan adalah nilai yang menentukan apakah pesan (atau bagian pesan) yang mendukung layanan ditandatangani, ditandatangani, dan dienkripsi, atau dikirim tanpa tanda tangan atau enkripsi. Untuk informasi selengkapnya tentang properti, lihat Memahami Tingkat Perlindungan, dan untuk contoh pemrograman, lihat Cara: Mengatur Properti ProtectionLevel. Untuk informasi selengkapnya tentang merancang kontrak layanan dengan ProtectionLevel konteks, lihat Merancang Kontrak Layanan.

Lihat juga