WCF - Güvenlik
Bir WCF hizmeti, yalnızca amaçlanan bir istemcinin hizmetlere erişebilmesi için iki güvenlik modu veya düzeyine sahip sağlam bir güvenlik sistemine sahiptir. Dağıtılmış bir işlemde yaygın olan güvenlik tehditleri büyük ölçüde WCF tarafından yönetilir.
Temel Güvenlik Özellikleri
WCF hizmetinin aşağıdaki şekilde gösterildiği gibi dört temel güvenlik özelliği vardır.
Authentication - Burada kimlik doğrulama, mesajın göndericisini tanımlamakla sınırlı değildir, karşılıklı bir işlemdir, yani, her türlü aracı saldırısı olasılığını ortadan kaldırmak için mesaj alıcısının kimlik doğrulaması gerekir.
Authorization- Bu, güvenliği sağlamak için bir WCF hizmeti tarafından atılan bir sonraki adımdır ve burada, hizmetin arayanı daha ileri gitme yetkisi verip vermeyeceği belirlenir. Yetkilendirme, kimlik doğrulamaya bağlı olmasa da, normalde kimlik doğrulamayı takip eder.
Confidentiality- Arayan ile bir hizmet arasındaki bilgi alışverişi, mesajın amaçlanmadığı diğer kişiler tarafından yorumlanmasını kısıtlamak için gizli tutulur. Bunu mümkün kılmak için, çok çeşitli diğer mekanizmalarla birlikte şifreleme kullanılır.
Integrity - Son anahtar konsept, bütünlüğü korumaktır, yani, mesajın göndericiden alıcıya giden yolculuğunda hiç kimse tarafından tahrif edilmediğine dair güvence sunmaktır.
Güvenlik Modunu Aktar
WCF, bir istemci ile sunucu arasında güvenli bir iletişim sağlamak için aşağıdaki aktarım güvenlik modlarını sunar. Çeşitli aktarım güvenlik modları aşağıda belirtilmiştir.
None- Bu mod, herhangi bir mesaj güvenliğini garanti etmez ve hizmet, istemci hakkında herhangi bir kimlik bilgisi almaz. Bu mod, mesajların değiştirilmesine izin verebileceğinden ve bu nedenle önerilmez.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "None"/>
</binding>
</wsHttpBinding>
Transport- Bu mod, TCP, IPC, Https ve MSMQ gibi iletişim protokollerinin kullanılması yoluyla güvenli bir mesaj aktarımı sağlamanın en kolay yoludur. Bu mod, aktarım noktadan noktaya olduğunda ve çoğunlukla kontrollü bir ortamda, yani intranet uygulamalarında kullanıldığında daha etkilidir.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "Transport"/>
</binding>
</wsHttpBinding>
Message- Güvenlik modu, karşılıklı kimlik doğrulamaya izin verir ve mesajlar şifreli olduğundan ve güvenli bir protokol olarak kabul edilmeyen http aracılığıyla taşınabildiğinden büyük ölçüde gizlilik sunar. Burada güvenlik, bir mesaj transferine kaç aracının dahil olduğu ve güvenli bir ulaşım olup olmadığı dikkate alınmadan uçtan uca sağlanır. Mod tipik olarak internet uygulamaları tarafından kullanılır.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "Message"/>
</binding>
</wsHttpBinding>
Mixed - Bu güvenlik modu sık kullanılmaz ve istemci kimlik doğrulaması yalnızca istemci düzeyinde sunulur.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "TransportWithMessageCredential"/>
</binding>
</wsHttpBinding>
Both- Bu güvenlik modu, sağlam bir güvenlik kapağı sunmak için hem taşıma güvenliğinden hem de mesaj güvenliğinden oluşur, ancak genellikle genel performansın aşırı yüklenmesine neden olur. Bu yalnızca MSMQ tarafından desteklenmektedir.
<netMsmqBinding>
<binding name = "WCFSecurityExample">
<security mode = "Both"/>
</binding>
</netMsmqBinding>
BasicHttpBinding dışındaki tüm WCF bağlamaları, varsayılan olarak bir ölçüde aktarım güvenliğine sahiptir.
Mesaj Güvenlik Düzeyi
Mesaj seviyesi güvenliği, WCF protokollerine bağlı değildir. Standart bir algoritma kullanarak verileri şifreleyerek mesaj verileriyle birlikte kullanılır. Mesaj güvenlik seviyesi için farklı bağlamalar için bir dizi müşteri kimlik bilgisi mevcuttur ve bunlar aşağıda tartışılmıştır.
Client credentials for message level security in WCF
None- Burada, mesajın güvenliğini sağlamak için şifreleme kullanılırken, istemci kimlik doğrulaması yapılmaz, bu da hizmete anonim bir istemci tarafından erişilebileceği anlamına gelir. BasicHttpBinding dışında, tüm WCF bağlamaları bu istemci kimlik bilgilerini destekler. Ancak NetNamedPipeBinding için bu istemci kimlik bilgilerinin hiç kullanılamadığına dikkat edilmelidir.
Windows- Burada, gerçek zamanlı oturum açmış bir kullanıcı için hem ileti şifreleme hem de istemci kimlik doğrulaması gerçekleşir. Bu durumda da, diğer tüm WCF bağlamalarının aksine, NetNamedPipeBinding kullanılamaz ve BasicHttpBinding desteğini vermez.
UserName- Burada mesajlar şifrelenir ve ayrıca bir KullanıcıAdı sunarak güvence altına alınır ve istemcilerin bir şifre sunmaları gerektiği için kimlik doğrulaması yapılır. BasicHttpBinding, yukarıdaki iki istemci kimlik bilgisi gibi, UserName'i desteklemez ve NetNamedPipeBinding için kullanılamaz.
Certificate- Mesaj şifrelemenin yanı sıra, hem istemci hem de hizmet sertifika ile kimlik doğrulaması alır. Bu istemci kimlik bilgisi kullanılabilir ve NetNamedPipeBinding dışındaki tüm WCF bağlamaları tarafından desteklenir.
IssuedToken- Cardspace gibi bir otoriteden Verilen Tokenler, mesajların kimliğini doğrulamak için kullanılır. Mesajların şifrelenmesi de burada gerçekleştirilir.
Aşağıdaki kod, istemci kimlik bilgilerinin WCF ileti güvenlik düzeyinde / modunda nasıl yapılandırıldığını gösterir.
<netTcpBinding>
<binding name = "WCFMessageSecurityExample">
<security mode = "Message">
<message clientCredentialType = "None"/>
</security>
</binding>
</netTcpBinding>
<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>
Burada, birincisi daha hızlı olduğundan, nakliye güvenlik modunun mesaj güvenlik seviyesinin üzerinde bir üstünlüğe sahip olduğuna dikkat edilmelidir. Herhangi bir ek kodlama gerektirmez ve birlikte çalışabilirlik desteği sunar ve bu nedenle genel performansı düşürmez.
Bununla birlikte, güvenlik açısından, mesaj güvenlik modu daha sağlamdır ve protokollerden bağımsızdır ve uçtan uca güvenlik sunar.