Share via


Identitas dan Autentikasi Layanan

Identitas titik akhir layanan adalah nilai yang dihasilkan dari layanan Bahasa Deskripsi Layanan Web (WSDL). Nilai ini, disebarluaskan ke klien mana pun, digunakan untuk mengautentikasi layanan. Setelah klien memulai komunikasi ke titik akhir dan layanan mengautentikasi layanan itu sendiri ke klien, klien membandingkan nilai identitas titik akhir dengan nilai aktual yang dikembalikan proses autentikasi titik akhir. Jika cocok, klien yakin telah menghubungi titik akhir layanan yang diharapkan. Ini berfungsi sebagai perlindungan terhadap phishing dengan mencegah klien dialihkan ke titik akhir yang dihosting oleh layanan berbahaya.

Untuk aplikasi sampel yang menunjukkan pengaturan identitas, lihat Sampel Identitas Layanan. Untuk mengetahui informasi selengkapnya tentang titik akhir dan alamat titik akhir, lihat Alamat.

Catatan

Saat Anda menggunakan NT LanMan (NTLM) untuk autentikasi, identitas layanan tidak diperiksa karena, di bawah NTLM, klien tidak dapat mengautentikasi server. NTLM digunakan saat komputer merupakan bagian dari grup kerja Windows, atau saat menjalankan versi Windows yang lebih lama yang tidak mendukung autentikasi Kerberos.

Saat klien memulai saluran aman untuk mengirim pesan ke layanan di atasnya, infrastruktur Windows Communication Foundation (WCF) mengautentikasi layanan, dan hanya mengirim pesan jika identitas layanan cocok dengan identitas yang ditentukan dalam alamat titik akhir yang digunakan klien.

Pemrosesan identitas terdiri dari tahapan berikut:

  • Pada waktu desain, pengembang klien menentukan identitas layanan dari metadata titik akhir (diekspos melalui WSDL).

  • Saat runtime, aplikasi klien memeriksa klaim mandat keamanan layanan sebelum mengirim pesan apa pun ke layanan.

Pemrosesan identitas pada klien dianalogikan dengan autentikasi klien pada layanan. Layanan aman tidak menjalankan kode sampai mandat klien telah diautentikasi. Demikian juga, klien tidak mengirim pesan ke layanan sampai mandat layanan telah diautentikasi berdasarkan apa yang diketahui sebelumnya dari metadata layanan.

Properti Identity kelas EndpointAddress mewakili identitas layanan yang dipanggil oleh klien. Layanan ini menerbitkan Identity dalam metadatanya. Saat pengembang klien menjalankan Alat Utilitas Metadata ServiceModel (Svcutil.exe) terhadap titik akhir layanan, konfigurasi yang dihasilkan berisi nilai properti layanan Identity. Infrastruktur WCF (jika dikonfigurasi dengan keamanan) memverifikasi bahwa layanan memiliki identitas yang ditentukan.

Penting

Metadata berisi identitas layanan yang diharapkan, jadi disarankan agar Anda mengekspos metadata layanan melalui cara yang aman, misalnya, dengan membuat titik akhir HTTPS untuk layanan. Untuk mengetahui informasi selengkapnya, lihat Cara: Mengamankan Titik Akhir Metadata.

Jenis Identitas

Layanan dapat menyediakan enam jenis identitas. Setiap jenis identitas sesuai dengan elemen yang dapat dimuat di dalam elemen <identity> dalam konfigurasi. Jenis yang digunakan tergantung pada skenario dan persyaratan keamanan layanan. Tabel berikut ini menjelaskan setiap jenis identitas.

Jenis identitas Deskripsi Skenario umum
DNS (Domain Name System) Gunakan elemen ini dengan sertifikat X.509 atau akun Windows. Ini membandingkan nama DNS yang ditentukan dalam mandat dengan nilai yang ditentukan dalam elemen ini. Pemeriksaan DNS memungkinkan Anda menggunakan sertifikat dengan DNS atau nama subjek. Jika sertifikat diterbitkan kembali dengan DNS atau nama subjek yang sama, pemeriksaan identitas masih valid. Saat sertifikat diterbitkan kembali, sertifikat mendapatkan kunci RSA baru tetapi mempertahankan DNS atau nama subjek yang sama. Ini berarti bahwa klien tidak perlu memperbarui informasi identitas mereka tentang layanan.
Sertifikat. Default saat ClientCredentialType diatur ke Sertifikat. Elemen ini menentukan nilai sertifikat X.509 yang dikodekan Base64 untuk dibandingkan dengan klien.

Gunakan juga elemen ini saat menggunakan CardSpace sebagai mandat untuk mengautentikasi layanan.
Elemen ini membatasi autentikasi ke satu sertifikat berdasarkan nilai thumbprint-nya. Ini memungkinkan autentikasi yang lebih ketat karena nilai thumbprint unik. Ini dilengkapi dengan satu peringatan: Jika sertifikat diterbitkan kembali dengan nama Subjek yang sama, sertifikat juga memiliki Thumbprint baru. Oleh karena itu, klien tidak dapat memvalidasi layanan kecuali thumbprint baru diketahui. Untuk mengetahui informasi tentang menemukan thumbprint sertifikat, lihat Cara: Mengambil Thumbprint Sertifikat.
Referensi Sertifikat Identik dengan opsi Sertifikat yang dijelaskan sebelumnya. Namun, elemen ini memungkinkan Anda menentukan nama sertifikat dan lokasi penyimpanan untuk mengambil sertifikat. Sama seperti skenario Sertifikat yang dijelaskan sebelumnya.

Manfaatnya adalah lokasi penyimpanan sertifikat dapat berubah.
RSA Elemen ini menentukan nilai kunci RSA untuk dibandingkan dengan klien. Ini mirip dengan opsi sertifikat tetapi daripada menggunakan thumbprint sertifikat, kunci RSA sertifikat digunakan sebagai gantinya. Pemeriksaan RSA memungkinkan Anda secara khusus membatasi autentikasi ke satu sertifikat berdasarkan kunci RSA-nya. Ini memungkinkan autentikasi yang lebih ketat dari kunci RSA tertentu dengan mengorbankan layanan, yang tidak lagi berfungsi dengan klien yang ada jika nilai kunci RSA berubah.
Nama Prinsipal Pengguna (UPN). Default saat ClientCredentialType diatur ke Windows dan proses layanan tidak berjalan di bawah salah satu akun sistem. Elemen ini menentukan UPN tempat layanan berjalan. Lihat bagian Protokol dan Identitas Kerberos di Menimpa Identitas Layanan untuk Autentikasi. Ini memastikan bahwa layanan berjalan di bawah akun pengguna Windows tertentu. Akun pengguna dapat berupa pengguna yang masuk saat ini atau layanan yang berjalan di bawah akun pengguna tertentu.

Pengaturan ini memanfaatkan keamanan Windows Kerberos jika layanan berjalan di bawah akun domain dalam lingkungan Direktori Aktif.
Nama prinsipal layanan (SPN). Default saat ClientCredentialType diatur ke Windows dan proses layanan berjalan di bawah salah satu akun sistem—LocalService, LocalSystem, atau NetworkService. Elemen ini menentukan SPN yang terkait dengan akun layanan. Lihat bagian Protokol dan Identitas Kerberos di Menimpa Identitas Layanan untuk Autentikasi. Ini memastikan bahwa SPN dan akun Windows tertentu yang terkait dengan SPN mengidentifikasi layanan.

Anda dapat menggunakan alat Setspn.exe untuk mengaitkan akun komputer untuk akun pengguna layanan.

Pengaturan ini memanfaatkan keamanan Windows Kerberos jika layanan berjalan di bawah salah satu akun sistem atau di bawah akun domain yang memiliki nama SPN terkait dengannya dan komputer adalah anggota domain dalam lingkungan Direktori Aktif.

Menentukan Identitas di Layanan

Biasanya, Anda tidak perlu mengatur identitas pada layanan karena pemilihan jenis mandat klien menentukan jenis identitas yang terekspos dalam metadata layanan. Untuk mengetahui informasi selengkapnya tentang cara mengambil alih atau menentukan identitas layanan, lihat Menimpa Identitas Layanan untuk Autentikasi.

Menggunakan Elemen <identitas> dalam Konfigurasi

Jika Anda mengubah jenis mandat klien dalam pengikatan yang sebelumnya ditunjukkan ke Certificate,, maka WSDL yang dibuat berisi sertifikat X.509 serial Base64 untuk nilai identitas seperti yang ditunjukkan dalam kode berikut. Ini adalah default untuk semua jenis mandat klien selain Windows.

Anda dapat mengubah nilai identitas layanan default atau mengubah jenis identitas dengan menggunakan elemen <identity> dalam konfigurasi atau dengan mengatur identitas dalam kode. Kode konfigurasi berikut menetapkan identitas sistem nama domain (DNS) dengan nilai contoso.com.

Mengatur Identitas Secara Terprogram

Layanan Anda tidak harus secara eksplisit menentukan identitas, karena WCF otomatis menentukannya. Namun, WCF memungkinkan Anda menentukan identitas pada titik akhir, jika diperlukan. Kode berikut menambahkan titik akhir layanan baru dengan identitas DNS tertentu.

ServiceEndpoint ep = myServiceHost.AddServiceEndpoint(
                typeof(ICalculator),
                new WSHttpBinding(),
                String.Empty);
EndpointAddress myEndpointAdd = new EndpointAddress(new Uri("http://localhost:8088/calc"),
     EndpointIdentity.CreateDnsIdentity("contoso.com"));
ep.Address = myEndpointAdd;
Dim ep As ServiceEndpoint = myServiceHost.AddServiceEndpoint(GetType(ICalculator), New WSHttpBinding(), String.Empty)
Dim myEndpointAdd As New EndpointAddress(New Uri("http://localhost:8088/calc"), EndpointIdentity.CreateDnsIdentity("contoso.com"))
ep.Address = myEndpointAdd

Menentukan Identitas di Klien

Pada waktu desain, pengembang klien biasanya menggunakan Alat Utilitas Metadata ServiceModel (Svcutil.exe) untuk membuat konfigurasi klien. File konfigurasi yang dihasilkan (dimaksudkan untuk digunakan oleh klien) berisi identitas server. Misalnya, kode berikut dibuat dari layanan yang menentukan identitas DNS, seperti yang ditunjukkan dalam contoh sebelumnya. Perhatikan bahwa nilai identitas titik akhir klien cocok dengan layanan. Dalam hal ini, saat klien menerima mandat Windows (Kerberos) untuk layanan, klien mengharapkan nilainya adalah contoso.com.

Jika, alih-alih Windows, layanan menentukan sertifikat sebagai jenis mandat klien, properti DNS sertifikat diharapkan menjadi nilai contoso.com. (Atau jika properti DNS adalah null, nama subjek sertifikat harus contoso.com.)

Menggunakan Nilai Khusus untuk Identitas

File konfigurasi klien berikut menunjukkan cara identitas layanan diharapkan menjadi nilai tertentu. Dalam contoh berikut, klien dapat berkomunikasi dengan dua titik akhir. Yang pertama diidentifikasi dengan thumbprint sertifikat dan yang kedua dengan kunci RSA sertifikat. Artinya, sertifikat yang hanya berisi pasangan kunci umum/kunci privat, tetapi tidak dikeluarkan oleh otoritas tepercaya.

Pemeriksaan Identitas pada Run Time

Pada waktu desain, pengembang klien menentukan identitas server melalui metadatanya. Saat run time, pemeriksaan identitas dilakukan sebelum memanggil titik akhir apa pun pada layanan.

Nilai identitas terkait dengan jenis autentikasi yang ditentukan oleh metadata; dengan kata lain, jenis mandat yang digunakan untuk layanan.

Jika saluran dikonfigurasi untuk mengautentikasi menggunakan Secure Sockets Layer (SSL) tingkat pesan atau transportasi dengan sertifikat X.509 untuk autentikasi, nilai identitas berikut valid:

  • DNS. WCF memastikan bahwa sertifikat yang disediakan selama jabat tangan SSL berisi atribut DNS atau CommonName (CN) yang sama dengan nilai yang ditentukan dalam identitas DNS pada klien. Perhatikan bahwa pemeriksaan ini dilakukan selain menentukan validitas sertifikat server. Secara default, WCF memvalidasi bahwa sertifikat server dikeluarkan oleh otoritas akar tepercaya.

  • Sertifikat. Selama jabat tangan SSL, WCF memastikan bahwa titik akhir jarak jauh menyediakan nilai sertifikat yang tepat yang ditentukan dalam identitas.

  • Referensi Sertifikat. Sama seperti Sertifikat.

  • RSA. Selama jabat tangan SSL, WCF memastikan bahwa titik akhir jarak jauh menyediakan kunci RSA yang tepat yang ditentukan dalam identitas.

Jika layanan mengautentikasi menggunakan SSL tingkat pesan atau transportasi dengan mandat Windows untuk autentikasi, dan menegosiasikan mandat, nilai identitas berikut valid:

  • DNS. Negosiasi melewati SPN layanan sehingga nama DNS dapat diperiksa. SPN dalam bentuk host/<dns name>.

  • SPN. SPN layanan eksplisit dikembalikan, misalnya, host/myservice.

  • UPN. UPN akun layanan. UPN dalam bentuk username@domain. Misalnya, saat layanan berjalan di akun pengguna, mungkin berupa username@contoso.com.

Menentukan identitas secara terprogram (menggunakan properti Identity) bersifat opsional. Jika tidak ada identitas yang ditentukan, dan jenis mandat klien Windows, defaultnya adalah SPN dengan nilai yang diatur ke bagian nama host dari alamat titik akhir layanan yang diawali dengan literal "host/". Jika tidak ada identitas yang ditentukan, dan jenis mandat klien adalah sertifikat, defaultnya adalah Certificate. Ini berlaku untuk keamanan tingkat pesan dan transportasi.

Identitas dan Pengikatan Kustom

Karena identitas layanan tergantung pada jenis pengikatan yang digunakan, pastikan bahwa identitas yang sesuai diekspos saat membuat pengikatan kustom. Misalnya, dalam contoh kode berikut, identitas yang diekspos tidak kompatibel dengan jenis keamanan, karena identitas untuk pengikatan bootstrap percakapan aman tidak cocok dengan identitas untuk pengikatan pada titik akhir. Pengikatan percakapan aman mengatur identitas DNS, sementara WindowsStreamSecurityBindingElement mengatur identitas UPN atau SPN.

CustomBinding binding = new CustomBinding();
// The following binding exposes a DNS identity.
binding.Elements.Add(SecurityBindingElement.
    CreateSecureConversationBindingElement(
    SecurityBindingElement.
    CreateIssuedTokenForSslBindingElement(
    new IssuedSecurityTokenParameters())));

// The following element requires a UPN or SPN identity.
binding.Elements.Add(new WindowsStreamSecurityBindingElement());
binding.Elements.Add(new TcpTransportBindingElement());
Dim binding As New CustomBinding()
' The following binding exposes a DNS identity.
binding.Elements.Add(SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement.CreateIssuedTokenForSslBindingElement(New IssuedSecurityTokenParameters())))

' The following element requires a UPN or SPN identity.
binding.Elements.Add(New WindowsStreamSecurityBindingElement())
binding.Elements.Add(New TcpTransportBindingElement())

Untuk mengetahui informasi selengkapnya tentang cara menumpuk elemen pengikatan dengan benar untuk pengikatan kustom, lihat Membuat Pengikatan yang Ditentukan Pengguna. Untuk mengetahui informasi selengkapnya tentang membuat pengikatan kustom dengan SecurityBindingElement, lihat Cara: Membuat SecurityBindingElement untuk Mode Autentikasi Tertentu.

Lihat juga