Dela via


Gör så här: Skapa en säker session

Med undantag för <basicHttpBinding-bindningen> använder de systembaserade bindningarna i Windows Communication Foundation (WCF) automatiskt säkra sessioner när meddelandesäkerhet är aktiverat.

Som standard överlever inte säkra sessioner en webbserver som återvinns. När en säker session upprättas cachelagrade klienten och tjänsten nyckeln som är associerad med den säkra sessionen. När meddelandena utbyts ut byts endast en identifierare till den cachelagrade nyckeln ut. Om webbservern återanvänds återanvänds även cacheminnet, så att webbservern inte kan hämta den cachelagrade nyckeln för identifieraren. Om detta händer skickas ett undantag tillbaka till klienten. Säkra sessioner som använder en tillståndskänslig säkerhetskontexttoken (SCT) kan överleva att en webbserver återanvänds. Mer information om hur du använder en tillståndskänslig SCT i en säker session finns i Så här skapar du en säkerhetskontexttoken för en säker session.

Ange att en tjänst använder säkra sessioner med hjälp av en av bindningarna som tillhandahålls av systemet

  • Konfigurera en tjänst så att den använder en systembaserad bindning som stöder meddelandesäkerhet.

    Med undantag för <basicHttpBinding-bindningen> använder WCF automatiskt säkra sessioner när de systembaserade bindningarna har konfigurerats för att använda meddelandesäkerhet. I följande tabell visas de systembaserade bindningar som stöder meddelandesäkerhet och om meddelandesäkerhet är standardsäkerhetsmekanismen.

    Bindning som tillhandahålls av systemet Konfigurationselement Meddelandesäkerhet på som standard
    BasicHttpBinding <basicHttpBinding> Nej
    WSHttpBinding <wsHttpBinding> Ja
    WSDualHttpBinding <wsDualHttpBinding> Ja
    WSFederationHttpBinding <wsFederationHttpBinding> Ja
    NetTcpBinding <netTcpBinding> Nej
    NetMsmqBinding <netMsmqBinding> Nej

    I följande kodexempel används konfiguration för att ange en bindning med namnet wsHttpBinding_Calculator som använder <wsHttpBinding>, meddelandesäkerhet och säkra sessioner.

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

    I följande kodexempel anges att <wsHttpBinding>, meddelandesäkerhet och säkra sessioner används för att skydda secureCalculator tjänsten.

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

    Kommentar

    Säkra sessioner kan stängas av för wsHttpBinding genom att> ange establishSecurityContext attributet till false.< För de andra bindningarna som tillhandahålls av systemet kan säkra sessioner bara stängas av genom att skapa en anpassad bindning.

Ange att en tjänst använder säkra sessioner med hjälp av en anpassad bindning

  • Skapa en anpassad bindning som anger att SOAP-meddelanden skyddas av en säker session.

    Mer information om hur du skapar en anpassad bindning finns i Så här: Anpassa en systembaserad bindning.

    I följande kodexempel används konfiguration för att ange en anpassad bindning som meddelanden med en säker session.

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

    I följande kodexempel skapas en anpassad bindning som använder autentiseringsläget MutualCertificate för att starta en säker session.

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

Se även