Delen via


Procedure: Een beveiligde sessie maken

Met uitzondering van de <basicHttpBinding-binding> gebruiken de door het systeem geleverde bindingen in Windows Communication Foundation (WCF) automatisch beveiligde sessies wanneer berichtbeveiliging is ingeschakeld.

Beveiligde sessies overleven standaard geen webserver die gerecycled is. Wanneer er een beveiligde sessie tot stand is gebracht, slaat de client en de service de sleutel in de cache op die is gekoppeld aan de beveiligde sessie. Wanneer de berichten worden uitgewisseld, wordt alleen een id voor de sleutel in de cache uitgewisseld. Als de webserver wordt gerecycled, wordt de cache ook gerecycled, zodat de webserver de sleutel in de cache voor de id niet kan ophalen. Als dit gebeurt, wordt er een uitzondering teruggestuurd naar de client. Beveiligde sessies die gebruikmaken van een stateful security context token (SCT) kunnen overleven van een webserver die wordt gerecycled. Zie How to: Create a Security Context Token for a Secure Session (Een beveiliging contexttoken maken voor een beveiligde sessie) voor meer informatie over het gebruik van een stateful SCT in een beveiligde sessie.

Opgeven dat een service beveiligde sessies gebruikt met behulp van een van de door het systeem geleverde bindingen

  • Configureer een service voor het gebruik van een door het systeem geleverde binding die ondersteuning biedt voor berichtbeveiliging.

    Met uitzondering van de <basicHttpBinding-binding> , wanneer de door het systeem geleverde bindingen zijn geconfigureerd voor het gebruik van berichtbeveiliging, maakt WCF automatisch gebruik van beveiligde sessies. De volgende tabel bevat de door het systeem geleverde bindingen die berichtbeveiliging ondersteunen en of berichtbeveiliging het standaardbeveiligingsmechanisme is.

    Door het systeem geleverde binding Configuratie-element Standaard berichtbeveiliging ingeschakeld
    BasicHttpBinding <basicHttpBinding> Nee
    WSHttpBinding <wsHttpBinding> Ja
    WSDualHttpBinding <wsDualHttpBinding> Ja
    WSFederationHttpBinding <wsFederationHttpBinding> Ja
    NetTcpBinding <netTcpBinding> Nee
    NetMsmqBinding <netMsmqBinding> Nee

    In het volgende codevoorbeeld wordt een configuratie gebruikt om een binding op te geven met de <naam wsHttpBinding_Calculator wsHttpBinding>, berichtbeveiliging en beveiligde sessies.

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

    In het volgende codevoorbeeld wordt aangegeven dat de <sessies wsHttpBinding>, berichtbeveiliging en beveiligde sessies worden gebruikt om de secureCalculator service te beveiligen.

    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()
    

    Notitie

    Beveiligde sessies kunnen worden uitgeschakeld voor wsHttpBinding <>door het establishSecurityContext kenmerk in te stellen op .false Voor de andere door het systeem geleverde bindingen kunnen beveiligde sessies alleen worden uitgeschakeld door een aangepaste binding te maken.

Opgeven dat een service beveiligde sessies gebruikt met behulp van een aangepaste binding

  • Maak een aangepaste binding die aangeeft dat SOAP-berichten worden beveiligd door een beveiligde sessie.

    Zie Instructies voor het aanpassen van een door het systeem geleverde binding voor meer informatie over het maken van een aangepaste binding.

    In het volgende codevoorbeeld wordt een configuratie gebruikt om een aangepaste binding op te geven die berichten via een beveiligde sessie gebruiken.

    <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>  
    

    In het volgende codevoorbeeld wordt een aangepaste binding gemaakt die gebruikmaakt van de MutualCertificate verificatiemodus om een beveiligde sessie te bootstrapen.

    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()
    

Zie ook