Aracılığıyla paylaş


Nasıl yapılır: Güvenli Oturum Oluşturma

TemelHttpBinding> bağlaması <dışında, Windows Communication Foundation'da (WCF) sistem tarafından sağlanan bağlamalar, ileti güvenliği etkinleştirildiğinde otomatik olarak güvenli oturumları kullanır.

Varsayılan olarak, güvenli oturumlar geri dönüştürülen bir Web sunucusundan sağ çıkamaz. Güvenli bir oturum oluşturulduğunda, istemci ve hizmet güvenli oturumla ilişkili anahtarı önbelleğe alır. İletiler değiş tokuş edilirken, yalnızca önbelleğe alınan anahtarın tanımlayıcısı değiştirilir. Web sunucusu geri dönüştürüldüyse, web sunucusu tanımlayıcı için önbelleğe alınmış anahtarı alamayacak şekilde önbellek de geri dönüştürülür. Böyle bir durumda istemciye bir özel durum oluşturulur. Durum bilgisi olan bir güvenlik bağlam belirteci (SCT) kullanan güvenli oturumlar, bir Web sunucusunun geri dönüştürülmesini sağlayabilir. Güvenli oturumda durum bilgisi olan bir SCT kullanma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Güvenli Oturum için Güvenlik Bağlam Belirteci Oluşturma.

Bir hizmetin sistem tarafından sağlanan bağlamalardan birini kullanarak güvenli oturumlar kullandığını belirtmek için

  • Bir hizmeti, ileti güvenliğini destekleyen sistem tarafından sağlanan bir bağlama kullanacak şekilde yapılandırın.

    TemelHttpBinding> bağlaması <dışında, sistem tarafından sağlanan bağlamalar ileti güvenliğini kullanacak şekilde yapılandırıldığında, WCF otomatik olarak güvenli oturumları kullanır. Aşağıdaki tabloda, ileti güvenliğini destekleyen sistem tarafından sağlanan bağlamalar ve ileti güvenliğinin varsayılan güvenlik mekanizması olup olmadığı listelenir.

    Sistem tarafından sağlanan bağlama Yapılandırma öğesi İleti güvenliği varsayılan olarak açık
    BasicHttpBinding <basicHttpBinding> Hayır
    WSHttpBinding <wsHttpBinding> Yes
    WSDualHttpBinding <wsDualHttpBinding> Yes
    WSFederationHttpBinding <wsFederationHttpBinding> Yes
    NetTcpBinding <netTcpBinding> Hayır
    NetMsmqBinding <Netmsmqbinding> Hayır

    Aşağıdaki kod örneği wsHttpBinding>, ileti güvenliği ve güvenli oturumları kullanan< adlı wsHttpBinding_Calculator bağlamayı belirtmek için yapılandırmayı kullanır.

    <bindings>  
      <WSHttpBinding>  
       <binding name = "wsHttpBinding_Calculator">  
         <security mode="Message">  
           <message clientCredentialType="Windows"/>  
         </security>  
        </binding>  
      </WSHttpBinding>  
    </bindings>  
    

    Aşağıdaki kod örneği, hizmetin güvenliğini secureCalculator sağlamak için wsHttpBinding>, ileti güvenliği ve güvenli oturumların kullanıldığını belirtir<.

    WSHttpBinding myBinding = new WSHttpBinding();
    myBinding.Security.Mode = SecurityMode.Message;
    myBinding.Security.Message.ClientCredentialType =
        MessageCredentialType.Windows;
    
    // Create the Type instances for later use and the URI for
    // the base address.
    Type contractType = typeof(ICalculator);
    Type serviceType = typeof(Calculator);
    Uri baseAddress = new
        Uri("http://localhost:8036/serviceModelSamples/");
    
    // Create the ServiceHost and add an endpoint, then start
    // the service.
    ServiceHost myServiceHost =
        new ServiceHost(serviceType, baseAddress);
    myServiceHost.AddServiceEndpoint
        (contractType, myBinding, "secureCalculator");
    myServiceHost.Open();
    
    Dim myBinding As New WSHttpBinding()
    myBinding.Security.Mode = SecurityMode.Message
    myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows
    
    ' Create the Type instances for later use and the URI for 
    ' the base address.
    Dim contractType As Type = GetType(ICalculator)
    Dim serviceType As Type = GetType(Calculator)
    Dim baseAddress As New Uri("http://localhost:8036/serviceModelSamples/")
    
    ' Create the ServiceHost and add an endpoint, then start
    ' the service.
    Dim myServiceHost As New ServiceHost(serviceType, baseAddress)
    myServiceHost.AddServiceEndpoint(contractType, myBinding, "secureCalculator")
    myServiceHost.Open()
    

    Not

    özniteliği olarak ayarlanarak establishSecurityContext wsHttpBinding> için <güvenli oturumlar kapatılabilir.false Sistem tarafından sağlanan diğer bağlamalar için güvenli oturumlar yalnızca özel bir bağlama oluşturularak kapatılabilir.

Bir hizmetin özel bağlama kullanarak güvenli oturumlar kullandığını belirtmek için

  • SOAP iletilerinin güvenli bir oturum tarafından korunduğunu belirten özel bir bağlama oluşturun.

    Özel bağlama oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Sistem Tarafından Sağlanan Bağlamayı Özelleştirme.

    Aşağıdaki kod örneği, güvenli bir oturum kullanarak ileti veren özel bir bağlama belirtmek için yapılandırmayı kullanır.

    <bindings>  
      <!-- configure a custom binding -->  
      <customBinding>  
        <binding name="customBinding_Calculator">  
          <security authenticationMode="SecureConversation" />  
          <secureConversationBootstrap authenticationMode="SspiNegotiated" />  
          <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8"/>  
          <httpTransport/>  
        </binding>  
      </customBinding>  
    </bindings>  
    

    Aşağıdaki kod örneği, güvenli bir oturumu önyüklemek için kimlik doğrulama modunu kullanan MutualCertificate özel bir bağlama oluşturur.

    SecurityBindingElement security = SecurityBindingElement.CreateMutualCertificateBindingElement();
    
    // Use a secure session.
    security = SecurityBindingElement.CreateSecureConversationBindingElement(security, true);
    
    // Specify whether derived keys are required.
    security.SetKeyDerivation(true);
    
    // Create the custom binding.
    CustomBinding myBinding = new CustomBinding(security, new HttpTransportBindingElement());
    
    // Create the Type instances for later use and the URI for
    // the base address.
    Type contractType = typeof(ICalculator);
    Type serviceType = typeof(Calculator);
    Uri baseAddress = new
        Uri("http://localhost:8036/serviceModelSamples/");
    
    // Create the ServiceHost and add an endpoint, then start
    // the service.
    ServiceHost myServiceHost =
        new ServiceHost(serviceType, baseAddress);
    myServiceHost.AddServiceEndpoint
        (contractType, myBinding, "secureCalculator");
    myServiceHost.Open();
    
    Dim security As SecurityBindingElement = SecurityBindingElement.CreateMutualCertificateBindingElement()
    
    ' Use a secure session.
    security = SecurityBindingElement.CreateSecureConversationBindingElement(security, True)
    
    ' Specify whether derived keys are required.
    security.SetKeyDerivation(True)
    
    ' Create the custom binding.
    Dim myBinding As New CustomBinding(security, New HttpTransportBindingElement())
    
    ' Create the Type instances for later use and the URI for 
    ' the base address.
    Dim contractType As Type = GetType(ICalculator)
    Dim serviceType As Type = GetType(Calculator)
    Dim baseAddress As New Uri("http://localhost:8036/serviceModelSamples/")
    
    ' Create the ServiceHost and add an endpoint, then start
    ' the service.
    Dim myServiceHost As New ServiceHost(serviceType, baseAddress)
    myServiceHost.AddServiceEndpoint(contractType, myBinding, "secureCalculator")
    myServiceHost.Open()
    

Ayrıca bkz.