WCF Güvenlik Kılavuzu - 1 (Tasarım Hususları)

WCF servislerini tasarlarken hangi "en iyi uygulama" kararları öneriliyor; derliyoruz, paylaşıyoruz.

Windows Communication Foundation (WCF) uygulamaları geliştiriyorsanız "güvenlik" asla ihmal etmemeniz gereken bir boyut. Ancak WCF'nin henüz yeni bir altyapı oluşu (1.0 sürümünde) nedeniyle işin sahiplerinden nasihatler bekliyoruz.

Microsoft'un Patterns&Practices bölümünden bir grup hayatlarını sadece WCF güvenliğine adamışlar ve CodePlex'te konuşlanmış bu sahife ile çeşitli "yol yordam" tavsiyeleri yazıyorlar. Ekibin ilgili projedeki "WCF Security Guidance" başlıklı kaynak belgesini doğrudan değil ama katkılar yaparak parça parça tercüme etmeye çalıştık. Faydalı olması dileğiyle.

Özgün Belgenin Müellifleri: J.D. Meier , Jason Taylor , Prashant Bansode , Carlos Farre, Madhu Sundararajan, Steve Gregersen

Aşağıda verilen nasihatler dizisi tekrar kullanılabilirlik adına olabildiğince soyutlanmıştır. Bu nedenle başlangıç noktası olarak dikkate almanız ve yolculuk esnasında kendi yoğurt yiyişinizi geliştirmeniz salık verilir.

Tasarım Hususları

Servis'i sarmalayıcı (wrapper) olarak tasarlayın:

"Wrapper" Türkçeye çevirince manasını kaybeden birçok yabancı kelimeden birisi. Bu madde ile anlatılmak istenen, servisinizin işi yapan değil, işi yaptıran bir konumda olması. Bu servis kodları içerisinde mantık gömmeyin, o mantığı farklı bileşenlere dağıtın; bakımınız kolaylaşsın, modülerliğiniz artsın demek istiyorlar.

ASMX'ten geliyorsanız var olan istemcileri desteklemek için basicHttpBinding kullanın:

Klasik web servisleri (.asmx) sunuyor idiyseniz, WCF'ye geçiş yapıp aynı servisleri basicHttpBinding binding'i ile sunabilirsiniz. Bu binding seçeneğinin özelliği güvenlik için hususi müdahaleler gerektirmesi. Varsayılan olarak açılmış bir güvenliği yok. Östelik WS* özelliklerini de desteklemiyor.

DCOM'dan geliyorsanız netTcpBinding kullanın:

.NET'ten .NET'e konuşan sistemler üzerindeyseniz ve daha önceden de COM+ yollarından geçtiyseniz tercihiniz varsayılan olarak güvenlik ve güvenilirlik özelliklerini destekleyen netTcpBinding binding'i olmalıdır. DCOM'dan geçiş yapıyorsanız işleyişin çok da benzer olmadığını göreceksiniz. Alışın, SOA farklı.

İstemcileriniz intranet içinde ise "transport security"yi tercih edin:

Servisinizin müşterilerinin bir intranet ortamında olduğundan eminseniz, netTcpBinding'i kullanıp "transport security"yi açmak hem performanslı hem de gayet güvenli bir yöntem olacaktır. Ayarınıza göre iletimdeki güvenliği Windows ağının güvenli iletişim mekanizmasına veya sertifikasyona emanet ediyorsunuz demektir bu.

Kullanıcı doğrulama seçeneklerinizi bilin:

Hangi binding için nasıl doğrulama seçenekleriniz olabileceğini bilmelisiniz. Ona göre binding'lerinizi de çeşitlersiniz. Meselâ "transport security"yi netTcpBinding ile kullanıyorsanız kullanıcı doğrulama için sadece Windows veya "sertifika" seçenekleriniz var. Yok ben kendi kullanıcı adım ile doğrulama yapıyorum diyorsanız buna uygun binding ve security tercihleri yapmalısınız. Seçenek listeniz şurada.

Binding (bağlama) seçeneklerinizi bilin:

Şimdiye kadar da söyledik, binding tercihiniz güvenlik ve güvenilirlik mevzularını etkileyecektir. İhtiyacınıza uyuşan bir binding (bağlama) mutlaka vardır. Şu listeyi inceleyebilirsiniz.

Microsoft dışı sistemlerle beraber çalışacaksanız basicHttpBinding veya wsHttpBinding kullanın:

Eğer Microsoft haricindeki sistemlerle konuşacaksanız tabî olarak HTTP ve HTTPS protokolünü kullanmanız gerekecektir. Bu protokolü de bahsettiğimiz binding'ler destekliyor.

Microsoft dışı istemcileriniz "WS* stack"ten anlıyorsa wsHttpBinding kullanın:

Microsoft dışı sistemleriniz WS* stack'i destekliyorsa, "text encoding" (metin kodlamayı) ve HTTP prokolünü destekleyen wsHttpBinding tek seçeneğiniz.

...

Sonraki Bahis: Denetim ve Log'lama

, , , , , , ,

Arşivden

Yorum bulunmuyor.

Yorum yazabilirsiniz


* [b], [i] ve [quote] serbest