Skenario yang tidak didukung
Karena berbagai alasan, Windows Communication Foundation (WCF) tidak mendukung beberapa skenario keamanan tertentu. Misalnya, Windows XP Home Edition tidak menerapkan protokol autentikasi SSPI atau Kerberos, dan oleh karena itu WCF tidak mendukung operasi layanan dengan autentikasi Windows pada platform tersebut. Mekanisme autentikasi lainnya, seperti nama pengguna/kata sandi dan autentikasi terintegrasi HTTP/HTTPS didukung saat menjalankan WCF di bawah Windows XP Home Edition.
Skenario peniruan
Identitas yang ditiru mungkin tidak mengalir ketika klien melakukan panggilan asinkron
Ketika klien WCF melakukan panggilan asinkron ke layanan WCF menggunakan autentikasi Windows di bawah peniruan identitas, autentikasi mungkin terjadi dengan identitas proses klien alih-alih identitas yang ditiru.
Windows XP dan cookie token konteks aman diaktifkan
WCF tidak mendukung peniruan identitas dan InvalidOperationException dilepaskan ketika kondisi berikut ada:
Sistem operasi Windows XP.
Mode autentikasi menghasilkan identitas Windows.
Properti Impersonation dari OperationBehaviorAttribute diatur ke Required.
Token konteks keamanan (security context token atau SCT) berbasis status dibuat (secara default, pembuatan dinonaktifkan).
SCT berbasis status hanya dapat dibuat menggunakan pengikatan khusus. Untuk mengetahui informasi selengkapnya, lihat Cara: Membuat Token Konteks Keamanan untuk Sesi Aman. Dalam kode, token diaktifkan dengan membuat elemen pengikatan keamanan (baik SymmetricSecurityBindingElement atau AsymmetricSecurityBindingElement) menggunakan metode SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) atau SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) dan mengatur requireCancellation
parameter ke false
. Parameter mengacu pada penembolokan SCT. Mengatur nilai ke false
mengaktifkan fitur SCT berbasis status.
Atau, dalam konfigurasi, token diaktifkan dengan membuat <customBinding>
, lalu menambahkan elemen<security>
, dan mengatur atribut authenticationMode
ke SecureConversation dan atribut requireSecurityContextCancellation
ke true
.
Catatan
Persyaratan sebelumnya bersifat spesifik. Misalnya, CreateKerberosBindingElement membuat elemen pengikatan yang menghasilkan identitas Windows, tetapi tidak membuat SCT. Oleh karena itu, Anda dapat menggunakannya dengan opsi Required
pada Windows XP.
Kemungkinan konflik ASP.NET
WCF dan ASP.NET dapat mengaktifkan atau menonaktifkan peniruan. Ketika ASP.NET meng-hosting aplikasi WCF, konflik mungkin ada antara pengaturan konfigurasi WCF dan ASP.NET. Jika terjadi konflik, pengaturan WCF lebih diutamakan, kecuali properti Impersonation diatur ke NotAllowed, dalam hal ini pengaturan peniruan ASP.NET lebih diutamakan.
Beban assembly mungkin gagal dalam peniruan
Jika konteks yang ditiru tidak memiliki hak akses untuk memuat assembly dan jika ini adalah pertama kalinya runtime bahasa umum (common language runtime atau CLR) mencoba memuat assembly untuk AppDomain tersebut, AppDomain menembolok kegagalan tersebut. Upaya berikutnya harus memuat assembly (atau semua assembly) tersebut gagal, bahkan setelah mengembalikan peniruan, dan bahkan jika konteks yang dikembalikan memiliki hak akses untuk memuat assembly. Ini karena CLR tidak memasang ulang beban setelah konteks pengguna diubah. Anda harus memulai ulang domain aplikasi untuk memulihkan dari kegagalan.
Catatan
Nilai default untuk properti AllowedImpersonationLevel dari kelas WindowsClientCredential adalah Identification. Dalam kebanyakan kasus, konteks peniruan tingkat-identifikasi tidak memiliki hak untuk memuat assembly tambahan apa pun. Ini adalah nilai default, jadi ini adalah kondisi yang sangat umum untuk diperhatikan. Peniruan tingkat-identifikasi juga terjadi ketika proses peniruan identitas tidak memiliki hak istimewa SeImpersonate
. Untuk informasi selengkapnya, lihat Delegasi dan Peniruan Identitas.
Delegasi memerlukan negosiasi kredensial
Untuk menggunakan protokol autentikasi Kerberos dengan delegasi, Anda harus mengimplementasikan protokol Kerberos dengan negosiasi kredensial (terkadang disebut Kerberos "multisesi" atau "multilangkah"). Jika Anda menerapkan autentikasi Kerberos tanpa negosiasi kredensial (terkadang disebut Kerberos "satu kali" atau "sesi tunggal"), pengecualian akan dilemparkan. Untuk informasi selengkapnya tentang cara menerapkan negosiasi kredensial, lihat Kesalahan Autentikasi Debugging Windows.
Kriptografi
SHA-256 hanya didukung untuk penggunaan kunci konten
WCF mendukung berbagai algoritma pembuatan enkripsi dan digest tanda tangan yang dapat Anda tentukan menggunakan rangkaian algoritma dalam pengikatan yang disediakan sistem. Untuk keamanan yang ditingkatkan, WCF mendukung algoritma Secure Hash Algorithm (SHA) 2, khususnya SHA-256, untuk membuat hash digest tanda tangan. Rilis ini mendukung SHA-256 khusus untuk penggunaan kunci konten, seperti kunci Kerberos, dan ketika sertifikat X.509 tidak digunakan untuk menandatangani pesan. WCF tidak mendukung tanda tangan RSA (digunakan dalam sertifikat X.509) menggunakan hash SHA-256 karena kurangnya dukungan saat ini untuk RSA-SHA256 di WinFX.
Hash SHA-256 yang memenuhi FIPS tidak didukung
WCF tidak mendukung hash yang memenuhi SHA-256 FIPS, sehingga suite algoritma yang menggunakan SHA-256 tidak didukung oleh WCF pada sistem ketika penggunaan algoritma yang memenuhi FIPS diperlukan.
Algoritma yang memenuhi FIPS mungkin gagal jika registri diedit
Anda dapat mengaktifkan dan menonaktifkan algoritma yang memenuhi Standar Pemrosesan Informasi Federal (Federal Information Processing Standard atau FIPS) dengan menggunakan snap-in Microsoft Management Console (MMC) Local Security Setting. Anda juga dapat mengakses pengaturan di registri. Namun, perhatikan bahwa WCF tidak mendukung penggunaan registri untuk mengatur ulang pengaturan. Jika nilai diatur ke apa pun selain 1 atau 0, hasil yang tidak konsisten dapat terjadi antara CLR dengan sistem operasi.
Batasan enkripsi AES yang memenuhi FIPS
Enkripsi AES yang memenuhi FIPS tidak berfungsi dalam panggilan balik dupleks di bawah peniruan tingkat identifikasi.
Sertifikat CNG/KSP
Cryptography API: Next Generation (CNG) adalah pengganti jangka panjang untuk CryptoAPI. API ini tersedia dalam kode yang tidak dikelola pada Windows Vista, Windows Server 2008, dan versi Windows yang lebih baru.
.NET Framework 4.6.1 dan versi yang lebih lama tidak mendukung sertifikat ini karena menggunakan CryptoAPI warisan untuk menangani sertifikat CNG/KSP. Penggunaan sertifikat ini dengan .NET Framework 4.6.1 dan versi yang lebih lama akan menyebabkan pengecualian.
Ada dua cara yang mungkin untuk mengetahui apakah sertifikat menggunakan KSP:
Lakukan
p/invoke
dariCertGetCertificateContextProperty
, dan periksadwProvType
padaCertGetCertificateContextProperty
yang dikembalikan.Gunakan
certutil
perintah dari baris perintah untuk mengkueri sertifikat. Untuk informasi selengkapnya, lihat Tugas Certutil untuk pemecahan masalah sertifikat.
Keamanan pesan gagal jika menggunakan peniruan ASP.NET dan kompatibilitas ASP.NET diperlukan
WCF tidak mendukung kombinasi pengaturan berikut karena dapat mencegah terjadinya autentikasi klien:
Peniruan ASP.NET diaktifkan. Ini dilakukan dalam file Web.config dengan mengatur atribut
impersonate
dari elemen<identity>
ketrue
.Mode kompatibilitas ASP.NET diaktifkan dengan mengatur
aspNetCompatibilityEnabled
atribut <serviceHostingEnvironment> ketrue
.Keamanan mode pesan digunakan.
Solusinya adalah menonaktifkan mode kompatibilitas ASP.NET. Atau, jika mode kompatibilitas ASP.NET diperlukan, nonaktifkan fitur peniruan ASP.NET dan gunakan peniruan yang disediakan WCF sebagai gantinya. Untuk informasi selengkapnya, lihat Delegasi dan Peniruan Identitas.
Kegagalan alamat harfiah IPv6
Permintaan keamanan gagal ketika klien dan layanan berada di komputer yang sama, dan alamat harfiah IPv6 digunakan untuk layanan.
Alamat IPv6 harfiah berfungsi jika layanan dan klien berada di komputer yang berbeda.
Kegagalan pengambilan WSDL dengan kepercayaan gabungan
WCF memerlukan tepat satu dokumen WSDL untuk setiap simpul dalam rantai kepercayaan gabungan. Berhati-hatilah untuk tidak mengatur perulangan saat menentukan titik akhir. Salah satu cara ketika perulangan dapat muncul adalah menggunakan unduhan WSDL dari rantai kepercayaan gabungan dengan dua tautan atau lebih dalam dokumen WSDL yang sama. Skenario umum yang dapat menghasilkan masalah ini adalah layanan gabungan ketika Server Token Keamanan dan layanan dimuat di dalam ServiceHost yang sama.
Contoh situasi ini adalah layanan dengan tiga alamat titik akhir berikut:
http://localhost/CalculatorService/service
(layanan)http://localhost/CalculatorService/issue_ticket
(STS)http://localhost/CalculatorService/mex
(titik akhir metadata)
Ini melepaskan pengecualian.
Anda dapat membuat skenario ini berfungsi dengan menempatkan titik akhir issue_ticket
di tempat lain.
Atribut impor WSDL dapat hilang
WCF kehilangan jejak atribut pada elemen <wst:Claims>
dalam templat RST
saat melakukan impor WSDL. Ini terjadi selama impor WSDL jika Anda menentukan <Claims>
langsung di WSFederationHttpBinding.Security.Message.TokenRequestParameters
atau IssuedSecurityTokenRequestParameters.AdditionalRequestParameters
alih-alih menggunakan koleksi jenis klaim secara langsung. Karena impor kehilangan atribut, pengikatan tidak melakukan perjalanan pulang pergi dengan benar melalui WSDL dan karenanya salah di sisi klien.
Perbaikannya adalah memodifikasi pengikatan langsung pada klien setelah melakukan impor.