Vorgehensweise: Erstellen einer sicheren SitzungHow to: Create a Secure Session

Mit Ausnahme von der <BasicHttpBinding > binden, wird vom System bereitgestellten Bindungen in der Windows Communication Foundation (WCF) automatisch verwendet sichere Sitzungen, wenn die nachrichtensicherheit aktiviert ist.With the exception of the <basicHttpBinding> binding, the system-provided bindings in Windows Communication Foundation (WCF) automatically use secure sessions when message security is enabled.

Standardmäßig überleben sichere Sitzungen keine Webserver, die wiederverwendet werden.By default, secure sessions do not survive a Web server that is recycled. Wenn eine sichere Sitzung eingerichtet wird, speichern der Client und der Dienst den Schlüssel zwischen, der der sicheren Sitzung zugeordnet ist.When a secure session is established, the client and the service cache the key that is associated with the secure session. Beim Austauschen der Nachrichten wird nur ein Bezeichner des zwischengespeicherten Schlüssels ausgetauscht.As the messages are exchanged, only an identifier to the cached key is exchanged. Wenn der Webserver wiederverwendet wird, wird der Cache ebenfalls wiederverwendet. Der Webserver kann den im Cache zwischengespeicherten Schlüssel für den Bezeichner dann nicht abrufen.If the Web server is recycled, the cache is also recycled, such that the Web server cannot retrieve the cached key for the identifier. Wenn dies geschieht, wird für den Client eine Ausnahme ausgelöst.If this happens, an exception is thrown back to the client. Sichere Sitzungen, die ein zustandsbehaftetes Token für den Sicherheitskontext verwenden, bleiben auch nach Wiederverwenden eines Webservers aktiv.Secure sessions that use a stateful security context token (SCT) can survive a Web server being recycled. Weitere Informationen zur Verwendung von eines zustandsbehafteten SCT in einer sicheren Sitzung finden Sie unter Vorgehensweise: Erstellen Sie ein Sicherheitskontexttoken für eine Sicherheitssitzung.For more information about using a stateful SCT in a secure session, see How to: Create a Security Context Token for a Secure Session.

So geben Sie an, dass ein Dienst sichere Sitzungen verwendet, indem er eine der vom System bereitgestellten Bindungen nutztTo specify that a service uses secure sessions by using one of the system-provided bindings

  • Konfigurieren Sie einen Dienst so, dass er eine vom System bereitgestellte Bindung verwendet, die die Nachrichtensicherheit unterstützt.Configure a service to use a system-provided binding that supports message security.

    Mit Ausnahme von der <BasicHttpBinding > Bindung, wenn vom System bereitgestellten Bindungen konfiguriert wurden, automatisch mit nachrichtensicherheit, WCF, sichere Sitzungen verwendet.With the exception of the <basicHttpBinding> binding, when the system-provided bindings are configured to use message security, WCF automatically uses secure sessions. In der folgenden Tabelle sind die vom System bereitgestellten Bindungen aufgeführt, die die Nachrichtensicherheit unterstützen. Außerdem ist angegeben, ob die Nachrichtensicherheit der standardmäßige Sicherheitsmechanismus ist.The following table lists the system-provided bindings that support message security and whether message security is the default security mechanism.

    Vom System bereitgestellte BindungSystem-provided binding KonfigurationselementConfiguration element Nachrichtensicherheit standardmäßig aktiviertMessage security on by default
    BasicHttpBinding <basicHttpBinding><basicHttpBinding> NeinNo
    WSHttpBinding <wsHttpBinding><wsHttpBinding> JaYes
    WSDualHttpBinding <wsDualHttpBinding><wsDualHttpBinding> JaYes
    WSFederationHttpBinding <wsFederationHttpBinding><wsFederationHttpBinding> JaYes
    NetTcpBinding <netTcpBinding><netTcpBinding> NeinNo
    NetMsmqBinding <NetMsmqBinding ><netMsmqBinding> NeinNo

    Im folgenden Codebeispiel wird die Konfiguration verwendet, um eine Bindung mit dem Namen anzugeben wsHttpBinding_Calculator , verwendet der <WsHttpBinding >, die nachrichtensicherheit und sichere Sitzungen.The following code example uses configuration to specify a binding named wsHttpBinding_Calculator that uses the <wsHttpBinding>, message security, and secure sessions.

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

    Das folgende Codebeispiel gibt an, dass die <WsHttpBinding >, die nachrichtensicherheit und sichere Sitzungen werden verwendet, um sichere der secureCalculator Service.The following code example specifies that the <wsHttpBinding>, message security, and secure sessions are used to secure the secureCalculator service.

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

    Hinweis

    Sichere Sitzungen können für deaktiviert die durch Festlegen der establishSecurityContext -Attribut auf false.Secure sessions can be turned off for the by setting the establishSecurityContext attribute to false. Für die anderen vom System bereitgestellten Bindungen können Sie sichere Sitzungen nur deaktivieren, indem Sie eine benutzerdefinierte Bindung erstellen.For the other system-provided bindings, secure sessions can only be turned off by creating a custom binding.

So geben Sie an, dass ein Dienst mithilfe einer benutzerdefinierten Bindung sichere Sitzungen verwendetTo specify that a service uses secure sessions by using a custom binding

  • Erstellen Sie eine benutzerdefinierte Bindung, die angibt, dass SOAP-Nachrichten mithilfe einer sicheren Sitzung geschützt sind.Create a custom binding that specifies that SOAP messages are protected by a secure session.

    Weitere Informationen zum Erstellen einer benutzerdefinierten Bindung finden Sie unter wie: Anpassen einer Bindung sicherheitsbindungsarten.For more information about creating a custom binding, see How to: Customize a System-Provided Binding.

    Im folgenden Codebeispiel wird die Konfiguration verwendet, um eine benutzerdefinierte Bindung anzugeben, die Nachrichten mithilfe einer sicheren Sitzung bearbeitet.The following code example uses configuration to specify a custom binding that messages using a secure 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>  
    

    Das folgende Codebeispiel erstellt eine benutzerdefinierte Bindung, die den MutualCertificate-Authentifizierungsmodus verwendet, um eine sichere Sitzung mithilfe eines Bootstrap-Vorgangs zu starten.The following code example creates a custom binding that uses the MutualCertificate authentication mode to bootstrap a secure 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()
    

Siehe auchSee Also

WCF-BindungsübersichtWCF Bindings Overview