Memilih Jenis Mandat
Mandat adalah data yang digunakan Windows Communication Foundation (WCF) untuk menetapkan identitas atau kemampuan yang diklaim. Misalnya, paspor adalah mandat masalah pemerintah untuk membuktikan kewarganegaraan di negara atau wilayah. Di WCF, mandat dapat mengambil banyak formulir, seperti token nama pengguna dan sertifikat X.509. Topik ini membahas mandat, cara menggunakannya di WCF, dan cara memilih mandat yang tepat untuk aplikasi Anda.
Di banyak negara atau wilayah, SIM adalah contoh mandat. SIM berisi data yang mewakili identitas dan kemampuan seseorang. SIM berisi bukti kepemilikan dalam bentuk gambar pemilik. SIM dikeluarkan oleh otoritas tepercaya, biasanya departemen perizinan pemerintah. SIM disegel, dan dapat berisi hologram, menunjukkan bahwa itu belum dirusak atau dipalsukan.
Menyajikan mandat melibatkan penyajian data dan bukti kepemilikan data. WCF mendukung berbagai jenis kredensial di tingkat keamanan transportasi dan pesan. Misalnya, pertimbangkan dua jenis mandat yang didukung di WCF: nama pengguna dan mandat sertifikat (X.509).
Untuk mandat nama pengguna, nama pengguna mewakili identitas yang diklaim dan kata sandi memberikan bukti kepemilikan. Otoritas tepercaya dalam hal ini adalah sistem yang memvalidasi nama pengguna dan kata sandi.
Dengan mandat sertifikat X.509, nama subjek, nama alternatif subjek, atau bidang tertentu dalam sertifikat dapat digunakan sebagai klaim identitas, sementara bidang lain, seperti bidang Valid From
dan Valid To
, tentukan validitas sertifikat.
Jenis Mandat Transportasi
Tabel berikut ini memperlihatkan kemungkinan jenis mandat klien yang dapat digunakan oleh pengikatan dalam mode keamanan transportasi. Saat membuat layanan, atur properti ClientCredentialType
ke salah satu nilai ini untuk menentukan jenis kredensial yang harus disediakan klien untuk berkomunikasi dengan layanan Anda. Anda dapat mengatur jenis dalam kode atau file konfigurasi.
Pengaturan | Description |
---|---|
Tidak | Menentukan bahwa klien tidak perlu memberikan mandat apa pun. Ini diterjemahkan ke klien anonim. |
Dasar | Menentukan autentikasi dasar untuk klien. Untuk informasi tambahan, lihat RFC2617—Autentikasi HTTP: Autentikasi Dasar dan Digest. |
digest | Menentukan autentikasi digest untuk klien. Untuk informasi tambahan, lihat RFC2617—Autentikasi HTTP: Autentikasi Dasar dan Digest. |
Ntlm | Menentukan autentikasi NT LAN Manager (NTLM). Ini digunakan saat Anda tidak dapat menggunakan autentikasi Kerberos karena alasan tertentu. Anda juga dapat menonaktifkan penggunaannya sebagai fallback dengan mengatur properti AllowNtlm ke false , yang menyebabkan WCF melakukan upaya terbaik untuk melemparkan pengecualian jika NTLM digunakan. Perhatikan bahwa mengatur properti ini ke false mungkin tidak mencegah kredensial NTLM dikirim melalui kabel. |
Windows | Menentukan autentikasi Windows. Untuk menentukan hanya protokol Kerberos pada domain Windows, atur properti AllowNtlm ke false (defaultnya adalah true ). |
Sertifikat | Melakukan autentikasi klien menggunakan sertifikat X.509. |
Kata sandi | Pengguna harus memberikan nama pengguna dan kata sandi. Validasi pasangan nama pengguna/kata sandi menggunakan autentikasi Windows atau solusi kustom lainnya. |
Jenis Mandat Klien Pesan
Tabel berikut ini menunjukkan kemungkinan jenis mandat yang bisa Anda gunakan saat membuat aplikasi yang menggunakan keamanan pesan. Anda dapat menggunakan nilai-nilai ini dalam file kode atau konfigurasi.
Pengaturan | Description |
---|---|
Tidak | Menentukan bahwa klien tidak perlu memberikan mandat. Ini diterjemahkan ke klien anonim. |
Windows | Memungkinkan pertukaran pesan SOAP terjadi di bawah konteks keamanan yang ditetapkan dengan mandat Windows. |
Nama Pengguna | Memungkinkan layanan mengharuskan klien diautentikasi menggunakan kredensial nama pengguna. Perhatikan bahwa WCF tidak mengizinkan operasi kriptografi apa pun dengan nama pengguna, seperti membuat tanda tangan atau mengenkripsi data. WCF memastikan bahwa transportasi diamankan saat menggunakan mandat nama pengguna. |
Sertifikat | Memungkinkan layanan untuk mengharuskan klien diautentikasi menggunakan sertifikat X.509. |
Token yang Diterbitkan | Jenis token kustom yang dikonfigurasi sesuai dengan kebijakan keamanan. Jenis token default adalah Security Assertions Markup Language (SAML). Token dikeluarkan oleh layanan token yang aman. Untuk informasi selengkapnya, lihat Federasi dan Token yang Dikeluarkan. |
Model Negosiasi Mandat Layanan
Negosiasi adalah proses membangun kepercayaan antara klien dan layanan dengan bertukar mandat. Proses ini dilakukan secara berulang antara klien dan layanan, sehingga hanya mengungkapkan informasi yang diperlukan untuk langkah berikutnya dalam proses negosiasi. Dalam praktiknya, hasil akhirnya adalah pengiriman mandat layanan kepada klien yang akan digunakan dalam operasi berikutnya.
Dengan satu pengecualian, secara default pengikatan yang disediakan sistem di WCF menegosiasikan mandat layanan secara otomatis saat menggunakan keamanan tingkat pesan. (Pengecualiannya adalah BasicHttpBinding, yang tidak mengaktifkan keamanan secara default.) Untuk menonaktifkan perilaku ini, lihat properti NegotiateServiceCredential dan NegotiateServiceCredential.
Catatan
Saat keamanan SSL digunakan bersama .NET Framework 3.5 dan versi yang lebih baru, klien WCF menggunakan sertifikat perantara di penyimpanan sertifikatnya dan juga sertifikat perantara yang diterima selama negosiasi SSL untuk melakukan validasi rantai sertifikat pada sertifikat layanan. .NET Framework 3.0 hanya menggunakan sertifikat perantara yang telah dipasang pada penyimpanan sertifikat lokal.
Negosiasi Di Luar Band
Jika negosiasi otomatis dinonaktifkan, mandat layanan harus disediakan di klien sebelum mengirim pesan apa pun ke layanan. Ini juga dikenal sebagai penyediaan di luar band. Misalnya, jika jenis mandat yang ditentukan adalah sertifikat, dan negosiasi otomatis dinonaktifkan, klien harus menghubungi pemilik layanan untuk menerima dan menginstal sertifikat di komputer yang menjalankan aplikasi klien. Ini dapat dilakukan, misalnya, saat Anda ingin mengontrol dengan ketat klien mana yang dapat mengakses layanan dalam skenario bisnis-ke-bisnis. Negosiasi di luar band ini dapat dilakukan dalam email, dan sertifikat X.509 disimpan di penyimpanan sertifikat Windows, menggunakan alat seperti snap-in Sertifikat Microsoft Management Console (MMC).
Catatan
Properti ClientCredentials digunakan untuk menyediakan layanan dengan sertifikat yang dicapai melalui negosiasi di luar band. Ini diperlukan saat menggunakan kelas BasicHttpBinding karena pengikatan tidak memungkinkan negosiasi otomatis. Properti ini juga digunakan dalam skenario dupleks yang tidak terkait. Ini adalah skenario saat server mengirim pesan ke klien tanpa mengharuskan klien untuk mengirim permintaan ke server terlebih dahulu. Karena server tidak memiliki permintaan dari klien, server harus menggunakan sertifikat klien untuk mengenkripsi pesan ke klien.
Mengatur Nilai Mandat
Setelah memilih mode keamanan, Anda harus menentukan mandat aktual. Misalnya, jika jenis mandat diatur ke "sertifikat," Anda harus mengaitkan mandat tertentu (seperti sertifikat X.509 tertentu) dengan layanan atau klien.
Bergantung pada apakah Anda memprogram layanan atau klien, metode untuk mengatur nilai mandat sedikit berbeda.
Mengatur Mandat Layanan
Jika menggunakan mode transportasi, dan menggunakan HTTP sebagai transportasi, Anda harus menggunakan Internet Information Services (IIS) atau mengonfigurasi port dengan sertifikat. Untuk mengetahui informasi selengkapnya, lihat Ringkasan Keamanan Transportasi dan Keamanan Transportasi HTTP.
Untuk menyediakan layanan dengan mandat dalam kode, buat instans kelas ServiceHost dan tentukan mandat yang sesuai menggunakan kelas ServiceCredentials, diakses melalui properti Credentials.
Mengatur Sertifikat
Untuk menyediakan layanan dengan sertifikat X.509 yang akan digunakan untuk mengautentikasi layanan ke klien, gunakan metode SetCertificate kelas X509CertificateRecipientServiceCredential.
Untuk menyediakan layanan dengan sertifikat klien, gunakan metode SetCertificate kelas X509CertificateInitiatorServiceCredential.
Mengatur Mandat Windows
Jika klien menentukan nama pengguna dan kata sandi yang valid, mandat tersebut digunakan untuk mengautentikasi klien. Jika tidak, mandat pengguna yang masuk saat ini digunakan.
Mengatur Mandat Klien
Di WCF, aplikasi klien menggunakan klien WCF untuk tersambung ke layanan. Setiap klien berasal dari kelas ClientBase<TChannel>, dan properti ClientCredentials pada klien memungkinkan spesifikasi berbagai nilai mandat klien.
Mengatur Sertifikat
Untuk menyediakan layanan dengan sertifikat X.509 yang akan digunakan untuk mengautentikasi klien ke layanan, gunakan metode SetCertificate kelas X509CertificateInitiatorClientCredential.
Cara Mandat Klien Digunakan untuk Mengautentikasi Klien ke Layanan
Informasi mandat klien yang diperlukan untuk berkomunikasi dengan layanan disediakan menggunakan properti ClientCredentials atau properti Credentials. Saluran keamanan menggunakan informasi ini untuk mengautentikasi klien ke layanan. Autentikasi dilakukan melalui salah satu dari dua mode:
Mandat klien digunakan sekali sebelum pesan pertama dikirim, menggunakan instans klien WCF untuk membuat konteks keamanan. Semua pesan aplikasi kemudian diamankan melalui konteks keamanan.
Mandat klien digunakan untuk mengautentikasi setiap pesan aplikasi yang dikirim ke layanan. Dalam hal ini, tidak ada konteks yang ditetapkan antara klien dan layanan.
Identitas yang Ditetapkan Tidak Dapat Diubah
Saat metode pertama digunakan, konteks yang ditetapkan secara permanen dikaitkan dengan identitas klien. Artinya, setelah konteks keamanan ditetapkan, identitas yang terkait dengan klien tidak dapat diubah.
Penting
Ada situasi yang perlu diperhatikan saat identitas tidak dapat dialihkan (yaitu, saat menetapkan konteks keamanan aktif, perilaku default). Jika Anda membuat layanan yang berkomunikasi dengan layanan kedua, identitas yang digunakan untuk membuka klien WCF ke layanan kedua tidak dapat diubah. Ini menjadi masalah jika beberapa klien diizinkan untuk menggunakan layanan pertama dan layanan meniru klien saat mengakses layanan kedua. Jika layanan menggunakan kembali klien yang sama untuk semua penelepon, semua panggilan ke layanan kedua dilakukan di bawah identitas pemanggil pertama yang digunakan untuk membuka klien ke layanan kedua. Dengan kata lain, layanan menggunakan identitas klien pertama untuk semua kliennya untuk berkomunikasi dengan layanan kedua. Ini dapat menyebabkan peningkatan hak istimewa. Jika ini bukan perilaku layanan yang diinginkan, Anda harus melacak setiap pemanggil dan membuat klien baru ke layanan kedua untuk setiap pemanggil yang berbeda, dan memastikan bahwa layanan hanya menggunakan klien yang tepat untuk pemanggil yang tepat untuk berkomunikasi dengan layanan kedua.
Untuk mengetahui informasi selengkapnya tentang mandat dan sesi yang aman, lihat Pertimbangan Keamanan untuk Sesi Aman.
Lihat juga
- System.ServiceModel.ClientBase<TChannel>
- ClientBase<TChannel>.ClientCredentials
- ClientCredentials.ClientCertificate
- BasicHttpMessageSecurity.ClientCredentialType
- HttpTransportSecurity.ClientCredentialType
- MessageSecurityOverHttp.ClientCredentialType
- MessageSecurityOverMsmq.ClientCredentialType
- MessageSecurityOverTcp.ClientCredentialType
- TcpTransportSecurity.ClientCredentialType
- X509CertificateInitiatorClientCredential.SetCertificate
- X509CertificateInitiatorServiceCredential.SetCertificate
- Konsep Keamanan
- Mengamankan Layanan dan Klien
- Memprogram Keamanan WCF
- Keamanan Transportasi HTTP