Hizmetleri Güvenli Hale Getirme

Windows Communication Foundation (WCF) hizmetinin güvenliği iki birincil gereksinimden oluşur: aktarım güvenliği ve yetkilendirme. (Güvenlik olaylarının denetlendiği üçüncü bir gereksinim, Denetim.) Kısaca, aktarım güvenliği kimlik doğrulamasını (hem hizmetin hem de istemcinin kimliğini doğrulama), gizlilik (ileti şifrelemesi) ve bütünlük (kurcalama algılamak için dijital imzalama) içerir. Yetkilendirme, kaynaklara erişimin denetimidir; örneğin, yalnızca ayrıcalıklı kullanıcıların bir dosyayı okumasına izin verir. WCF'nin özellikleri kullanıldığında, iki birincil gereksinim kolayca uygulanır.

sınıfı (veya yapılandırmadaki< temelHttpBinding> öğesi) dışındaBasicHttpBinding, önceden tanımlanmış tüm bağlamalar için aktarım güvenliği varsayılan olarak etkinleştirilir. Bu bölümdeki konular iki temel senaryoyu kapsar: Internet Information Services'te (IIS) barındırılan bir intranet hizmetinde aktarım güvenliği ve yetkilendirmesi uygulama ve IIS'de barındırılan bir hizmette aktarım güvenliği ve yetkilendirmesi uygulama.

GüvenlikLe ilgili Temel Bilgiler

Güvenlik kimlik bilgilerine dayanır. Kimlik bilgisi, bir varlığın iddia edilen kişi olduğunu kanıtlar. (Varlık kişi, yazılım süreci, şirket veya yetkilendirilebilecek herhangi bir şey olabilir.) Örneğin, bir hizmetin istemcisi bir kimlik talebiyapar ve kimlik bilgisi bu talebi bir şekilde kanıtlar. Tipik bir senaryoda kimlik bilgileri değişimi gerçekleşir. İlk olarak, bir hizmet kimliğini beyan eder ve bunu istemciye kimlik bilgileriyle kanıtlar. Buna karşılık, istemci bir kimlik talebi yapar ve hizmete bir kimlik bilgisi sunar. Her iki taraf da diğer tarafın kimlik bilgilerine güveniyorsa, tüm iletilerin gizlilikle paylaşıldığı ve tüm iletilerin bütünlüğünü korumak için imzalandığı güvenli bir bağlam oluşturulabilir. Hizmet istemcinin kimliğini oluşturduktan sonra, kimlik bilgilerindeki talepleri bir gruptaki bir rol veya üyelikle eşleştirebilir. Her iki durumda da, istemcinin ait olduğu rolü veya grubu kullanarak hizmet , istemciye rol veya grup ayrıcalıklarına göre sınırlı bir işlem kümesi gerçekleştirme yetkisi sağlar.

Windows Güvenliği Mekanizmaları

İstemci ve hizmet bilgisayarının her ikisi de ağda oturum açmasını gerektiren bir Windows etki alanındaysa, kimlik bilgileri Windows altyapısı tarafından sağlanır. Bu durumda, bir bilgisayar kullanıcısı ağda oturum açtığında kimlik bilgileri oluşturulur. Ağdaki her kullanıcı ve her bilgisayar, güvenilen kullanıcı ve bilgisayar kümesine ait olarak doğrulanmalıdır. Windows sisteminde, bu tür her kullanıcı ve bilgisayar güvenlik sorumlusu olarak da bilinir.

Kerberos denetleyicisi tarafından desteklenen bir Windows etki alanında, Kerberos denetleyicisi her güvenlik sorumlusuna bilet verme işlemini temel alan bir düzen kullanır. Denetleyicinin verdiği biletlere sistemdeki diğer bilet verenler tarafından güvenilir. Bir varlık bir işlem gerçekleştirmeye veya bir kaynağa (makinedeki dosya veya dizin gibi) erişmeye çalıştığında, anahtar geçerliliği açısından incelenir ve geçerse, sorumluya işlem için başka bir bilet verilir. Bilet vermenin bu yöntemi, her işlem için sorumluyu doğrulamaya çalışma alternatifinden daha verimlidir.

Windows etki alanlarında kullanılan daha eski, daha az güvenli bir mekanizma NT LAN Manager 'dır (NTLM). Kerberos'un kullanılamadığı durumlarda (genellikle çalışma grubundaki gibi bir Windows etki alanının dışında), NTLM alternatif olarak kullanılabilir. NTLM, IIS için bir güvenlik seçeneği olarak da kullanılabilir.

Windows sisteminde yetkilendirme, her bilgisayarı ve kullanıcıyı bir rol ve grup kümesine atayarak çalışır. Örneğin, her Windows bilgisayarı yönetici rolündeki bir kişi (veya kişi grubu) tarafından ayarlanmalıdır ve denetlenmelidir. Bir diğer rol de çok daha kısıtlı izinlere sahip olan kullanıcının rolüdür. Role ek olarak, kullanıcılar gruplara atanır. Grup, birden çok kullanıcının aynı rolde performans göstermesini sağlar. Bu nedenle uygulamada, kullanıcılar gruplara atanarak bir Windows makinesi yönetilir. Örneğin, bir bilgisayarın kullanıcı grubuna birkaç kullanıcı atanabilir ve yönetici grubuna çok daha kısıtlı bir kullanıcı kümesi atanabilir. Yerel bir makinede yönetici ayrıca yeni gruplar oluşturabilir ve gruba diğer kullanıcıları (hatta diğer grupları) atayabilir.

Windows çalıştıran bir bilgisayarda, bir dizindeki her klasör korunabilir. Başka bir ifadeyle, bir klasör seçip dosyalara kimlerin erişebileceğini ve dosyayı kopyalayıp kopyalayamayacağını veya (en ayrıcalıklı durumda) bir dosyayı değiştirip değiştiremeyeceğini, bir dosyayı silip silemeyeceğini veya klasöre dosya ekleyip ekleyemeyeceğini denetleyebilirsiniz. Bu, erişim denetimi olarak bilinir ve mekanizması erişim denetim listesi (ACL) olarak bilinir. ACL'yi oluştururken, herhangi bir grup veya gruba ve bir etki alanının tek tek üyelerine erişim ayrıcalıkları atayabilirsiniz.

WCF altyapısı, bu Windows güvenlik mekanizmalarını kullanacak şekilde tasarlanmıştır. Bu nedenle, intranette dağıtılan ve istemcileri Windows etki alanının üyeleriyle kısıtlanmış bir hizmet oluşturuyorsanız, güvenlik kolayca uygulanır. Etki alanında yalnızca geçerli kullanıcılar oturum açabilir. Kullanıcılar oturum açtıktan sonra Kerberos denetleyicisi, her kullanıcının diğer bilgisayar veya uygulamalarla güvenli bağlamlar oluşturmasını sağlar. Yerel makinede gruplar kolayca oluşturulabilir ve belirli klasörler korunurken, bu gruplar bilgisayarda erişim ayrıcalıkları atamak için kullanılabilir.

intranet hizmetlerinde Windows Güvenliği uygulama

Yalnızca Bir Windows etki alanında çalışan bir uygulamanın güvenliğini sağlamak için veya NetTcpBinding bağlamasının WSHttpBinding varsayılan güvenlik ayarlarını kullanabilirsiniz. Varsayılan olarak, aynı Windows etki alanındaki herkes WCF hizmetlerine erişebilir. Bu kullanıcılar ağda oturum açtığından, güvenilirdir. Bir hizmet ve istemci arasındaki iletiler gizlilik için şifrelenir ve bütünlük için imzalı. Windows güvenliğini kullanan bir hizmet oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Windows Kimlik Bilgileriyle Bir Hizmetin Güvenliğini Sağlama.

PrincipalPermissionAttribute Sınıfını Kullanarak Yetkilendirme

Bir bilgisayardaki kaynakların erişimini kısıtlamanız gerekiyorsa, en kolay yol sınıfını kullanmaktır PrincipalPermissionAttribute . Bu öznitelik, kullanıcının belirli bir Windows grubunda veya rolünde olmasını veya belirli bir kullanıcı olmasını talep ederek hizmet işlemlerinin çağrısını kısıtlamanızı sağlar. Daha fazla bilgi için bkz . Nasıl yapılır: PrincipalPermissionAttribute Sınıfıyla Erişimi Kısıtlama.

Kimliğe bürünme

Kimliğe bürünme, kaynaklara erişimi denetlemek için kullanabileceğiniz başka bir mekanizmadır. Varsayılan olarak, IIS tarafından barındırılan bir hizmet ASPNET hesabının kimliği altında çalışır. ASPNET hesabı yalnızca izni olan kaynaklara erişebilir. Ancak, bir klasörün ACL'sini ASPNET hizmet hesabını dışlamak, ancak diğer bazı kimliklerin klasöre erişmesine izin vermek için ayarlamak mümkündür. Daha sonra aspnet hesabına izin verilmiyorsa, bu kullanıcıların klasöre erişmesine nasıl izin verilip verilmediği soru haline gelir. Yanıt, hizmetin belirli bir kaynağa erişmek için istemcinin kimlik bilgilerini kullanmasına izin verilen kimliğe bürünme özelliğini kullanmaktır. Başka bir örnek, yalnızca belirli kullanıcıların izinlerine sahip olduğu bir SQL Server veritabanına erişirken gerçekleştirilen bir örnektir. Kimliğe bürünme kullanma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Hizmette İstemcinin Kimliğine Bürünme ve Temsilci Seçme ve Kimliğe Bürünme.

İnternet'te güvenlik

İnternet'te güvenlik, intranet üzerindeki güvenlikle aynı gereksinimlerden oluşur. Bir hizmetin orijinalliğini kanıtlamak için kimlik bilgilerini sunması ve istemcilerin de hizmete kimliğini kanıtlaması gerekir. Bir istemcinin kimliği kanıtlandıktan sonra hizmet, istemcinin kaynaklara ne kadar erişime sahip olduğunu denetleyebilir. Ancak, İnternet'in heterojen yapısı nedeniyle, sunulan kimlik bilgileri bir Windows etki alanında kullanılanlardan farklıdır. Kerberos denetleyicisi, bir etki alanındaki kullanıcıların kimlik doğrulamasını kimlik bilgileri için biletlerle işlerken, İnternet'te hizmetler ve istemciler kimlik bilgilerini sunmanın çeşitli yollarından herhangi birini kullanır. Ancak bu konunun amacı, İnternet'te erişilebilir bir WCF hizmeti oluşturmanıza olanak tanıyan ortak bir yaklaşım sunmaktır.

IIS ve ASP.NET kullanma

İnternet güvenliğinin gereksinimleri ve bu sorunları çözme mekanizmaları yeni değildir. IIS, Microsoft'un İnternet için Web sunucusudur ve bu sorunları gideren birçok güvenlik özelliğine sahiptir; buna ek olarak, ASP.NET WCF hizmetlerinin kullanabileceği güvenlik özelliklerini içerir. Bu güvenlik özelliklerinden yararlanmak için IIS'de bir WCF hizmeti barındırın.

ASP.NET Üyeliğini ve Rol Sağlayıcılarını Kullanma

ASP.NET bir üyelik ve rol sağlayıcısı içerir. Sağlayıcı, arayanların kimliğini doğrulamak için her çağıranın erişim ayrıcalıklarını belirtmenize de olanak tanıyan bir kullanıcı adı/parola çiftleri veritabanıdır. WCF ile, yapılandırma aracılığıyla önceden var olan bir üyeliği ve rol sağlayıcısını kolayca kullanabilirsiniz. Bunu gösteren örnek bir uygulama için Üyelik ve Rol Sağlayıcısı örneğine bakın.

IIS Tarafından Kullanılan Kimlik Bilgileri

Kerberos denetleyicisi tarafından desteklenen bir Windows etki alanının aksine, İnternet, her zaman oturum açan milyonlarca kullanıcıyı yönetmek için tek bir denetleyicisi olmayan bir ortamdır. Bunun yerine, İnternet'teki kimlik bilgileri çoğunlukla X.509 sertifikaları (Güvenli Yuva Katmanı veya SSL, sertifikalar olarak da bilinir) biçimindedir. Bu sertifikalar genellikle sertifikanın ve sertifikanın verildiği kişinin orijinalliğini engelleyen üçüncü taraf bir şirket olabilecek bir sertifika yetkilisi tarafından verilir. Hizmetinizi İnternet'te kullanıma açmak için, hizmetinizin kimliğini doğrulamak için böyle bir güvenilen sertifika da sağlamanız gerekir.

Soru şu noktada ortaya çıkar, böyle bir sertifikayı nasıl alırsınız? Bir yaklaşım, hizmetinizi dağıtmaya hazır olduğunuzda Authenticode veya VeriSign gibi bir üçüncü taraf sertifika yetkilisine gitmek ve hizmetiniz için bir sertifika satın almaktır. Ancak WCF ile geliştirme aşamasındaysanız ve henüz bir sertifika satın alma taahhüdünde bulunmaya hazır değilseniz, üretim dağıtımının benzetimini yapmak için kullanabileceğiniz X.509 sertifikaları oluşturmaya yönelik araçlar ve teknikler vardır. Daha fazla bilgi için bkz . Sertifikalarla Çalışma.

Güvenlik Modları

WCF güvenliğini programlamak birkaç kritik karar noktası gerektirir. En temellerden biri güvenlik modu seçimidir. İki ana güvenlik modu aktarım modu ve ileti modu'dır.

Her iki ana modun semantiğini birleştiren üçüncü mod, ileti kimlik bilgileri moduyla aktarımdır.

Güvenlik modu, iletilerin nasıl güvenli hale getirileceğini belirler ve aşağıda açıklandığı gibi her seçeneğin avantajları ve dezavantajları vardır. Güvenlik modunu ayarlama hakkında daha fazla bilgi için bkz . Nasıl yapılır: Güvenlik Modunu Ayarlama.

Aktarım Modu

Ağ ile uygulama arasında birkaç katman vardır. Bunlardan biri, uç noktalar arasındaki iletilerin aktarımını yöneten aktarım katmanıdır*,*. Şu anda, WCF'nin her biri iletilerin aktarımını güvenli hale getiren çeşitli aktarım protokolleri kullandığını anlamanız gerekir. (Taşımalar hakkında daha fazla bilgi için bkz. Taşımalar.)

Yaygın olarak kullanılan bir protokol HTTP'dir; bir diğeri TCP'dir. Bu protokollerin her biri, protokole özgü bir mekanizma (veya mekanizmalar) tarafından ileti aktarımının güvenliğini sağlayabilir. Örneğin, HTTP protokolü GENELLIKLE "HTTPS" olarak kısaltılan HTTP üzerinden SSL kullanılarak güvenli hale getirilir. Bu nedenle, güvenlik için aktarım modunu seçtiğinizde, protokol tarafından dikte edilen mekanizmayı kullanmayı seçersiniz. Örneğin, sınıfı seçip WSHttpBinding güvenlik modunu Aktarım olarak ayarlarsanız, güvenlik mekanizması olarak HTTP (HTTPS) üzerinden SSL'yi seçersiniz. Aktarım modunun avantajı, güvenlik nispeten düşük bir düzeyde tümleştirildiğinden ileti modundan daha verimli olmasıdır. Aktarım modu kullanılırken, güvenlik mekanizması aktarım belirtimine göre uygulanmalıdır ve bu nedenle iletiler yalnızca noktadan noktaya aktarım üzerinden güvenli bir şekilde akabilir.

İleti Modu

Buna karşılık, ileti modu güvenlik verilerini her iletinin bir parçası olarak ekleyerek güvenlik sağlar. XML ve SOAP güvenlik üst bilgilerini kullanarak, iletinin bütünlüğünü ve gizliliğini sağlamak için gereken kimlik bilgileri ve diğer veriler her iletiye eklenir. Her ileti güvenlik verileri içerdiği için her iletinin ayrı ayrı işlenmesi gerektiğinden performansta ücret uygulanır. (Aktarım modunda, aktarım katmanı güvenli hale getirildikten sonra tüm iletiler serbestçe akar.) Ancak ileti güvenliğinin aktarım güvenliğine göre bir avantajı vardır: daha esnektir. Yani, güvenlik gereksinimleri taşıma tarafından belirlenmemektedir. İletinin güvenliğini sağlamak için herhangi bir istemci kimlik bilgisi türünü kullanabilirsiniz. (Aktarım modunda, aktarım protokolü kullanabileceğiniz istemci kimlik bilgilerinin türünü belirler.)

İleti Kimlik Bilgileriyle Taşıma

Üçüncü mod hem aktarım hem de ileti güvenliğinin en iyilerini birleştirir. Bu modda aktarım güvenliği, her iletinin gizliliğini ve bütünlüğünü verimli bir şekilde sağlamak için kullanılır. Aynı zamanda, her ileti kimlik bilgisi verilerini içerir ve bu da iletinin kimliğinin doğrulanabilmesini sağlar. Kimlik doğrulaması ile yetkilendirme de uygulanabilir. Bir gönderenin kimliğini doğrulayarak, kaynaklara erişim gönderenin kimliğine göre verilebilir (veya reddedilebilir).

İstemci Kimlik Bilgisi Türünü ve Kimlik Bilgisi Değerini Belirtme

Bir güvenlik modu seçtikten sonra, bir istemci kimlik bilgisi türü de belirtebilirsiniz. İstemci kimlik bilgisi türü, bir istemcinin sunucuda kimliğini doğrulamak için kullanması gereken türü belirtir.

Ancak tüm senaryolar bir istemci kimlik bilgisi türü gerektirmez. HTTP (HTTPS) üzerinden SSL kullanıldığında, bir hizmet istemcide kendi kimliğini doğrular. Bu kimlik doğrulamasının bir parçası olarak hizmetin sertifikası, anlaşma adlı bir işlemde istemciye gönderilir. SSL ile güvenli aktarım, tüm iletilerin gizli olmasını sağlar.

İstemcinin kimliğinin doğrulanması gereken bir hizmet oluşturuyorsanız, bir istemci kimlik bilgisi türü seçiminiz seçilen aktarıma ve moda bağlıdır. Örneğin, HTTP aktarımını kullanmak ve aktarım modunu seçmek size Temel, Özet ve diğerleri gibi çeşitli seçenekler sunar. (Bu kimlik bilgisi türleri hakkında daha fazla bilgi için bkz. HTTP Kimlik Doğrulamasını Anlama.)

Bir Windows etki alanında yalnızca ağın diğer kullanıcılarına sağlanacak bir hizmet oluşturuyorsanız, kullanımı en kolay olan Windows istemci kimlik bilgisi türüdür. Ancak, sertifika içeren bir hizmet sağlamanız da gerekebilir. Bu, Nasıl yapılır: İstemci Kimlik Bilgisi Değerlerini Belirtme bölümünde gösterilir.

Kimlik Bilgisi Değerleri

Kimlik bilgisi değeri , hizmetin kullandığı gerçek kimlik bilgisidir. Bir kimlik bilgisi türü belirttikten sonra, hizmetinizi gerçek kimlik bilgileriyle de yapılandırmanız gerekebilir. Windows'u seçtiyseniz (ve hizmet bir Windows etki alanında çalışır), gerçek bir kimlik bilgisi değeri belirtmezsiniz.

Kimlik

WCF'de kimlik terimi sunucu ve istemci için farklı anlamlara sahiptir. Kısaca, bir hizmeti çalıştırırken kimlik doğrulamasından sonra güvenlik bağlamı için bir kimlik atanır. Gerçek kimliği görüntülemek için sınıfın WindowsIdentity ve PrimaryIdentity özelliklerini ServiceSecurityContext denetleyin. Daha fazla bilgi için bkz . Nasıl yapılır: Güvenlik Bağlamını İnceleme.

Buna karşılık, istemcide hizmeti doğrulamak için kimlik kullanılır. Tasarım zamanında, istemci geliştirici kimlik> öğesini hizmetten alınan bir değere ayarlayabilir<. Çalışma zamanında istemci, öğenin değerini hizmetin gerçek kimliğine göre denetler. Denetim başarısız olursa, istemci iletişimi sonlandırır. Hizmet belirli bir kullanıcının kimliği altında çalışıyorsa değer bir kullanıcı asıl adı (UPN) veya hizmet bir makine hesabı altında çalışıyorsa hizmet asıl adı (SPN) olabilir. Daha fazla bilgi için bkz . Hizmet Kimliği ve Kimlik Doğrulaması. Kimlik bilgisi bir sertifika veya sertifikayı tanımlayan bir sertifikada bulunan bir alan da olabilir.

Koruma Düzeyleri

ProtectionLevel özelliği çeşitli öznitelik sınıflarında (ve OperationContractAttribute sınıfları gibiServiceContractAttribute) gerçekleşir. Koruma düzeyi, bir hizmeti destekleyen iletilerin (veya ileti bölümlerinin) imzalanıp imzalanmadığını, imzalanıp şifrelenmediğini veya imzalar ya da şifreleme olmadan gönderilip gönderilmediğini belirten bir değerdir. Özelliği hakkında daha fazla bilgi için bkz . Koruma Düzeyini Anlama ve programlama örnekleri için bkz . Nasıl yapılır: ProtectionLevel Özelliğini Ayarlama. bağlamıyla bir hizmet sözleşmesi ProtectionLevel tasarlama hakkında daha fazla bilgi için bkz . Hizmet Sözleşmeleri Tasarlama.

Ayrıca bkz.