İstemcileri Güvenli Hale Getirme

Windows Communication Foundation'da (WCF), hizmet istemciler için güvenlik gereksinimlerini belirler. Diğer bir ifadeyle, hizmet hangi güvenlik modunun kullanılacağını ve istemcinin kimlik bilgisi sağlaması gerekip gerekmediğini belirtir. Bu nedenle, bir istemcinin güvenliğini sağlama işlemi basittir: hizmetten alınan meta verileri kullanın (yayımlanıyorsa) ve bir istemci oluşturun. Meta veriler, istemcinin nasıl yapılandırılır belirtir. Hizmet, istemcinin bir kimlik bilgisi sağlamasını gerektiriyorsa, gereksinime uyan bir kimlik bilgisi almanız gerekir. Bu konu başlığında, işlem daha ayrıntılı olarak ele alınmaktadır. Güvenli hizmet oluşturma hakkında daha fazla bilgi için bkz . Hizmetlerin Güvenliğini Sağlama.

Hizmet Güvenliği Belirtir

Varsayılan olarak, WCF bağlamalarında güvenlik özellikleri etkindir. (Özel durum. BasicHttpBinding) Bu nedenle, hizmet WCF kullanılarak oluşturulduysa kimlik doğrulaması, gizlilik ve bütünlük sağlamak için güvenlik uygulama olasılığı daha yüksektir. Bu durumda, hizmetin sağladığı meta veriler güvenli bir iletişim kanalı oluşturmak için nelerin gerekli olduğunu gösterir. Hizmet meta verileri herhangi bir güvenlik gereksinimi içermiyorsa, bir hizmette HTTP üzerinden Güvenli Yuva Katmanı (SSL) gibi bir güvenlik şeması oluşturmanın bir yolu yoktur. Ancak, hizmet istemcinin bir kimlik bilgisi sağlamasını gerektiriyorsa, istemci geliştiricisi, dağıtıcısı veya yöneticisi, istemcinin hizmette kimliğini doğrulamak için kullanacağı gerçek kimlik bilgilerini sağlamalıdır.

Meta Verileri Alma

İstemci oluştururken ilk adım, istemcinin iletişim kuracağı hizmetin meta verilerini almaktır. Bu işlem iki yolla yapılabilir. İlk olarak, hizmet bir meta veri değişimi (MEX) uç noktası yayımlarsa veya meta verilerini HTTP veya HTTPS üzerinden kullanılabilir hale getirirse, hem istemci hem de yapılandırma dosyası için hem kod dosyalarını oluşturan ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanarak meta verileri indirebilirsiniz. (Aracı kullanma hakkında daha fazla bilgi için bkz. WCF İstemcisi Kullanarak Hizmetlere Erişme.) Hizmet bir MEX uç noktası yayımlamaz ve meta verilerini HTTP veya HTTPS üzerinden kullanılabilir hale getirmezse, güvenlik gereksinimlerini ve meta verileri açıklayan belgeler için hizmet oluşturucuya başvurmanız gerekir.

Önemli

Meta verilerin güvenilir bir kaynaktan gelmesi ve üzerinde oynanmaması önerilir. HTTP protokolü kullanılarak alınan meta veriler düz metin olarak gönderilir ve üzerinde oynanabilir. Hizmet ve HttpsGetUrl özelliklerini kullanıyorsaHttpsGetEnabled, HTTPS protokolunu kullanarak verileri indirmek için hizmet oluşturucusunun sağladığı URL'yi kullanın.

Güvenliği Doğrulama

Meta veri kaynakları iki geniş kategoriye ayrılabilir: güven kaynakları ve güvenilmeyen kaynaklar. Bir kaynağa güveniyorsanız ve bu kaynağın güvenli MEX uç noktasından istemci kodunu ve diğer meta verileri indirdiyseniz, istemciyi derleyebilir, doğru kimlik bilgileriyle sağlayabilir ve başka endişeniz olmadan çalıştırabilirsiniz.

Ancak, az bilginiz olan bir kaynaktan bir istemci ve meta veri indirmeyi seçersensiniz, kodun kullandığı güvenlik ölçülerini doğrulamayı unutmayın. Örneğin, hizmet gizlilik ve bütünlük talep etmediği sürece (en azından) kişisel veya finansal bilgilerinizi bir hizmete gönderen bir istemci oluşturmamalısınız. Hizmetin sahibine, bu bilgileri açıklamaya istekli olduğunuz ölçüde güvenmeniz gerekir, çünkü bu bilgiler onlara görünür olacaktır.

Bu nedenle kural olarak, güvenilmeyen bir kaynaktan alınan kod ve meta verileri kullanırken kodu ve meta verileri denetleyerek ihtiyacınız olan güvenlik düzeyini karşıladığından emin olun.

İstemci Kimlik Bilgilerini Ayarlama

İstemcide istemci kimlik bilgilerini ayarlamak iki adımdan oluşur:

  1. Hizmetin gerektirdiği istemci kimlik bilgisi türünü belirleyin. Bu, iki yöntemden biri tarafından gerçekleştirilir. İlk olarak, hizmet oluşturucusunun belgeleri varsa, hizmetin gerektirdiği istemci kimlik bilgisi türünü (varsa) belirtmelidir. İkinci olarak, yalnızca Svcutil.exe aracı tarafından oluşturulan bir yapılandırma dosyanız varsa, hangi kimlik bilgisi türünün gerekli olduğunu belirlemek için tek tek bağlamaları inceleyebilirsiniz.

  2. Gerçek bir istemci kimlik bilgisi belirtin. Gerçek istemci kimlik bilgisi, türünden ayırt etmek için istemci kimlik bilgisi değeri olarak adlandırılır. Örneğin, istemci kimlik bilgisi türü bir sertifika belirtiyorsa, hizmetin güvendiği bir sertifika yetkilisi tarafından verilen bir X.509 sertifikası sağlamanız gerekir.

İstemci Kimlik Bilgisi Türünü Belirleme

Svcutil.exe aracının oluşturulduğu yapılandırma dosyasını oluşturduysanız, hangi istemci kimlik bilgisi türünün gerekli olduğunu belirlemek için bağlamalar bölümünü inceleyin<.> bölümünde, güvenlik gereksinimlerini belirten bağlama öğeleri bulunur. Özellikle, her bağlamanın <security> Öğesini inceleyin. Bu öğe, üç olası değerden birine (Message, Transportveya TransportWithMessageCredential) ayarlayabileceğiniz özniteliğini içerirmode. özniteliğinin değeri modu, mod ise hangi alt öğelerin önemli olduğunu belirler.

<security> öğesi bir veya <message> öğesi veya her ikisini de <transport> içerebilir. Önemli öğe, güvenlik moduyla eşleşen öğedir. Örneğin, aşağıdaki kod güvenlik modunun olduğunu "Message"ve öğesinin istemci kimlik bilgisi türünün <message> olduğunu "Certificate"belirtir. Bu durumda, <transport> öğesi yoksayılabilir. Ancak, <message> öğesi bir X.509 sertifikasının sağlanması gerektiğini belirtir.

<wsHttpBinding>  
    <binding name="WSHttpBinding_ICalculator">  
       <security mode="Message">  
           <transport clientCredentialType="Windows"
                      realm="" />  
           <message clientCredentialType="Certificate"
                    negotiateServiceCredential="true"  
                    algorithmSuite="Default"
                    establishSecurityContext="true" />  
       </security>  
    </binding>  
</wsHttpBinding>  

Özniteliği aşağıdaki clientCredentialType örnekte gösterildiği gibi olarak ayarlanırsa "Windows", gerçek bir kimlik bilgisi değeri sağlamanız gerekmediğini unutmayın. Bunun nedeni, Windows tümleşik güvenliğinin istemciyi çalıştıran kişinin gerçek kimlik bilgilerini (Kerberos belirteci) sağlamasıdır.

<security mode="Message">  
    <transport clientCredentialType="Windows "
        realm="" />  
</security>  

İstemci Kimlik Bilgisi Değerini Ayarlama

İstemcinin bir kimlik bilgisi sağlaması gerektiği belirlenirse, istemciyi yapılandırmak için uygun yöntemi kullanın. Örneğin, bir istemci sertifikası ayarlamak için yöntemini kullanın SetCertificate .

Yaygın bir kimlik bilgisi biçimi X.509 sertifikasıdır. Kimlik bilgilerini iki yolla sağlayabilirsiniz:

  • bunu istemci kodunuzda (yöntemini kullanarak) programlama yoluyla SetCertificate .

İstemci için yapılandırma dosyasının davranışlar <>bölümünü ekleyerek ve öğesini kullanarak clientCredentials (aşağıda gösterilmiştir).

Kodda <clientCredentials> Değeri Ayarlama

Kodda clientCredentials ><değeri ayarlamak için sınıfının özelliğine ClientCredentials ClientBase<TChannel> erişmeniz gerekir. özelliği, aşağıdaki tabloda gösterildiği gibi çeşitli kimlik bilgileri türlerine erişime izin veren bir ClientCredentials nesne döndürür.

ClientCredential Özelliği Açıklama Notlar
ClientCertificate Bir döndürür X509CertificateInitiatorClientCredential İstemci tarafından hizmette kimliğini doğrulamak için sağlanan bir X.509 sertifikasını temsil eder.
HttpDigest Bir döndürür HttpDigestClientCredential HTTP özet kimlik bilgilerini temsil eder. Kimlik bilgisi, kullanıcı adı ve parolanın karmasıdır.
IssuedToken Bir döndürür IssuedTokenClientCredential Federasyon senaryolarında yaygın olarak kullanılan bir Güvenlik Belirteci Hizmeti tarafından verilen özel bir güvenlik belirtecini temsil eder.
Peer Şunu döndürür: PeerCredential Bir Windows etki alanındaki Eş ağı katılımı için Eş kimlik bilgilerini temsil eder.
ServiceCertificate Bir döndürür X509CertificateRecipientClientCredential Bant dışı anlaşmada hizmet tarafından sağlanan bir X.509 sertifikasını temsil eder.
UserName Şunu döndürür: UserNamePasswordClientCredential Kullanıcı adı ve parola çiftini temsil eder.
Windows Şunu döndürür: WindowsClientCredential Bir Windows istemci kimlik bilgilerini (Kerberos kimlik bilgileri) temsil eder. sınıfının özellikleri salt okunur.

<Yapılandırmada clientCredentials> Değeri Ayarlama

Kimlik bilgisi değerleri, clientCredentials> öğesinin <alt öğeleri olarak bir uç nokta davranışı kullanılarak belirtilir. Kullanılan öğe, istemci kimlik bilgisi türüne bağlıdır. Örneğin, aşağıdaki örnekte clientCertificate kullanarak <<bir X.509 sertifikası ayarlama yapılandırması gösterilmektedir.>

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>
        <behavior name="myEndpointBehavior">  
          <clientCredentials>  
            <clientCertificate findvalue="myMachineName"
            storeLocation="Current" X509FindType="FindBySubjectName" />  
          </clientCredentials>  
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>  
</configuration>  

Yapılandırmada istemci kimlik bilgilerini ayarlamak için yapılandırma dosyasına bir <endpointBehaviors> öğesi ekleyin. Ayrıca, eklenen davranış öğesinin, aşağıdaki örnekte gösterildiği gibi istemci> öğesinin uç noktasının <<özniteliği kullanılarak behaviorConfiguration hizmetin uç noktasına> bağlanması gerekir. özniteliğinin behaviorConfiguration değeri, behavior name özniteliğinin değeriyle eşleşmelidir.

<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="http://localhost/servicemodelsamples/service.svc"
                binding="wsHttpBinding"
                bindingConfiguration="Binding1"
                behaviorConfiguration="myEndpointBehavior"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </client>
  </system.serviceModel>
</configuration>

Not

kullanıcı adı ve parola veya Windows kullanıcı ve parola değerleri gibi bazı istemci kimlik bilgisi değerleri uygulama yapılandırma dosyaları kullanılarak ayarlanamaz. Bu tür kimlik bilgisi değerleri yalnızca kodda belirtilebilir.

İstemci kimlik bilgilerini ayarlama hakkında daha fazla bilgi için bkz . Nasıl yapılır: İstemci Kimlik Bilgisi Değerlerini Belirtme.

Not

ClientCredentialType, aşağıdaki örnek yapılandırmada gösterildiği gibi olarak ayarlandığında "TransportWithMessageCredential"yoksayılırSecurityMode.

<wsHttpBinding>  
    <binding name="PingBinding">  
        <security mode="TransportWithMessageCredential"  >  
           <message  clientCredentialType="UserName"
               establishSecurityContext="false"
               negotiateServiceCredential="false" />  
           <transport clientCredentialType="Certificate"  />  
         </security>  
    </binding>  
</wsHttpBinding>  

Ayrıca bkz.