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 gangguan). Otorisasi adalah kontrol akses ke sumber daya, misalnya, hanya mengizinkan pengguna yang memiliki hak istimewa untuk membaca file. Dengan menggunakan fitur WCF, dua persyaratan utama akan mudah diimplementasikan.
Dengan pengecualian kelas BasicHttpBinding (atau elemen <basicHttpBinding> dalam konfigurasi), keamanan transfer diaktifkan secara default untuk semua pengikatan yang telah ditentukan sebelumnya. Topik di bagian ini mencakup dua skenario dasar: mengimplementasikan keamanan transfer dan otorisasi pada layanan intranet yang dihosting di Internet Information Services (IIS), serta mengimpelentasikan keamanan dan otorisasi transfer pada layanan yang dihosting di IIS.
Dasar-dasar Keamanan
Keamanan bergantung pada kredensial. Kredensial membuktikan bahwa entitas adalah siapa yang diklaimnya. (Entitas dapat berupa orang, proses perangkat lunak, perusahaan, atau apa pun yang dapat diotorisasi.) Misalnya, klien layanan membuat klaimidentitas, dan kredensial membuktikan klaim tersebut dalam beberapa cara. Dalam skenario umum, pertukaran kredensial terjadi. Pertama, layanan membuat klaim identitasnya dan membuktikannya kepada klien dengan kredensial. Sebaliknya, klien membuat klaim identitas dan memberikan 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 tersebut, 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 memerlukan keduanya untuk masuk ke jaringan, kredensial disediakan oleh infrastruktur Windows. Dalam hal ini, kredensial dibuat saat pengguna komputer masuk ke jaringan. Setiap pengguna dan setiap komputer di jaringan harus divalidasi sebagai milik kumpulan pengguna dan komputer tepercaya. Pada sistem Windows, setiap pengguna dan komputer tersebut juga dikenal sebagai prinsip keamanan.
Pada domain Windows yang didukung oleh pengontrol Kerberos, pengontrol Kerberos menggunakan skema berdasarkan pemberian tiket ke 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 mesin), tiket diperiksa validitasnya dan, jika lolos, prinsipal diberikan tiket lain untuk operasi. 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 bekerja dengan menetapkan setiap komputer dan pengguna ke serangkaian peran dan grup. Misalnya, setiap komputer Windows harus disiapkan dan dikendalikan oleh seseorang (atau sekelompok orang) yang berperan sebagai administrator. Peran lainnya adalah peran pengguna, yang memiliki serangkaian izin yang jauh lebih terbatas. Selain peran, pengguna 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 terbatas 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 (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 masing-masing anggota 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 mesin lokal, grup dapat dengan mudah dibuat, dan saat melindungi folder tertentu, grup tersebut dapat digunakan untuk menetapkan hak akses di komputer.
Mengimplementasikan Keamanan Windows pada Layanan Intranet
Untuk mengamankan aplikasi yang berjalan secara eksklusif di domain Windows, Anda dapat menggunakan pengaturan keamanan default dari pengikatan WSHttpBinding atau NetTcpBinding. Secara default, siapa pun di domain Windows yang sama dapat mengakses layanan WCF. Karena pengguna tersebut telah masuk ke jaringan, mereka dipercaya. 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 termudah adalah dengan menggunakan kelas PrincipalPermissionAttribute. Atribut ini memungkinkan Anda membatasi permintaan operasi layanan dengan meminta pengguna berada dalam grup atau peran Windows tertentu, atau menjadi pengguna tertentu. Untuk informasi selengkapnya, lihat Cara: Membatasi Akses dengan Kelas PrincipalPermissionAttribute.
Peniruan
Peniruan identitas 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, Anda dapat mengatur ACL folder untuk mengecualikan akun layanan ASPNET, tetapi mengizinkan identitas tertentu lainnya untuk mengakses folder. Pertanyaannya kemudian menjadi bagaimana cara mengizinkan pengguna tersebut untuk mengakses folder jika akun ASPNET tidak diizinkan untuk melakukannya. Jawabannya adalah menggunakan penyamaran, di mana layanan diizinkan menggunakan kredensial klien untuk mengakses sumber daya tertentu. Contoh lain adalah ketika mengakses database SQL Server yang hanya diizinkan oleh pengguna tertentu. Untuk informasi selengkapnya tentang menggunakan penyamaran, lihat Cara: Meniru Identitas Klien pada Layanan serta Delegasi dan Penyamaran.
Keamanan di Internet
Keamanan di Internet terdiri dari persyaratan yang sama seperti keamanan di intranet. Layanan perlu menyajikan kredensialnya untuk membuktikan keasliannya, dan klien perlu membuktikan identitas mereka ke layanan. Setelah identitas klien terbukti, layanan dapat mengontrol seberapa banyak akses yang dimiliki klien ke sumber daya. Namun, karena sifat Internet yang heterogen, kredensial yang disajikan berbeda dari yang digunakan di domain Windows. Sementara pengontrol Kerberos menangani autentikasi pengguna di domain dengan tiket untuk kredensial, di Internet, layanan dan klien bergantung pada salah satu dari beberapa cara berbeda untuk menyajikan kredensial. Namun, tujuan dari topik ini 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 memecahkan 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 oleh layanan WCF. Untuk memanfaatkan fitur keamanan ini, hosting layanan WCF di IIS.
Menggunakan Keanggotaan ASP.NET dan Penyedia Peran
ASP.NET termasuk keanggotaan dan penyedia peran. Penyedia adalah database pasangan nama pengguna/kata sandi untuk mengautentikasi pemanggil 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 contoh Keanggotaan dan Penyedia Peran.
Kredensial yang Digunakan oleh IIS
Tidak seperti domain Windows yang didukung oleh pengontrol Kerberos, Internet adalah lingkungan tanpa pengontrol tunggal untuk mengelola jutaan pengguna yang masuk setiap saat. Sebaliknya, kredensial di Internet paling sering dalam bentuk sertifikat X.509 (juga dikenal sebagai Secure Sockets Layer, atau SSL, sertifikat). Sertifikat ini biasanya diterbitkan oleh otoritas sertifikasi, yang dapat berupa perusahaan pihak ketiga yang menjamin keaslian sertifikat dan orang yang menerimanya. Untuk mengekspos layanan Anda di Internet, Anda juga harus menyediakan sertifikat tepercaya untuk mengautentikasi layanan Anda.
Muncul pertanyaan pada titik ini, bagaimana Anda mendapatkan sertifikat seperti itu? Salah satu pendekatannya adalah membuka 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 berkomitmen untuk membeli sertifikat, alat dan teknik 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 utamanya 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, Anda hanya perlu 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 kelas WSHttpBinding 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 transportasi, mekanisme keamanan harus diimplementasikan sesuai dengan spesifikasi untuk transportasi, dan dengan demikian pesan dapat mengalir dengan aman hanya dari titik ke titik di atas transportasi.
Mode Pesan
Sebaliknya, mode pesan memberikan keamanan dengan memasukkan 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 menghasilkan performa yang buruk 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: 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 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 transportasi HTTP dan memilih mode transportasi memberi Anda beberapa pilihan, seperti Dasar, Hash, 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 di Cara: Menentukan Nilai Kredensial Klien.
Nilai Kredensial
Nilai kredensial adalah kredensial sebenarnya yang digunakan layanan. Setelah menentukan jenis kredensial, Anda mungkin juga perlu mengonfigurasi layanan Anda dengan kredensial yang sebenarnya. Jika Anda telah memilih Windows (dan layanan akan berjalan di 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. Saat dijalankan, klien memeriksa nilai elemen terhadap identitas sebenarnya dari layanan. Jika pemeriksaan gagal, klien mengakhiri komunikasi. Nilainya bisa menjadi nama prinsipal pengguna (UPN) jika layanan berjalan di bawah identitas pengguna tertentu atau nama prinsipal 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
muncul pada beberapa kelas atribut (seperti kelas ServiceContractAttribute dan OperationContractAttribute). 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 Tingkat Perlindungan. Untuk informasi selengkapnya tentang merancang kontrak layanan dengan ProtectionLevel
dalam konteks, lihat Merancang Kontrak Layanan.
Lihat juga
- System.ServiceModel
- ServiceCredentials
- ServiceContractAttribute
- OperationContractAttribute
- Identitas dan Autentikasi Layanan
- Memahami Tingkat Perlindungan
- Delegasi dan Penyamaran
- Merancang Kontrak Layanan
- Keamanan
- Ringkasan Keamanan
- Cara: Mengatur Properti ProtectionLevel
- Cara: Mengamankan Layanan dengan Mandat Windows
- Cara: Mengatur Mode Keamanan
- Petunjuk: Menentukan Jenis Mandat Klien
- Cara: Membatasi Akses dengan Kelas PrincipalPermissionAttribute
- Cara: Meniru Klien pada Layanan
- Cara: Memeriksa Konteks Keamanan