Sdílet prostřednictvím


Postupy: Vytvoření zabezpečené relace

S výjimkou <základní vazbyHttpBinding> se systémové vazby ve Službě Windows Communication Foundation (WCF) automaticky používají zabezpečené relace, pokud je povoleno zabezpečení zpráv.

Zabezpečené relace ve výchozím nastavení nepřežijí webový server, který je recyklován. Při vytvoření zabezpečené relace klient a služba ukládají klíč, který je přidružený k zabezpečené relaci. Při výměně zpráv se vymění pouze identifikátor klíče uloženého v mezipaměti. Pokud je webový server recyklován, mezipaměť je také recyklována, aby webový server nemohl načíst klíč uložený v mezipaměti identifikátoru. Pokud k tomu dojde, dojde k výjimce zpět klientovi. Zabezpečené relace, které používají token SCT (Stateful Security Context Token), můžou přežít recyklaci webového serveru. Další informace o použití stavového SCT v zabezpečené relaci naleznete v tématu Postupy: Vytvoření tokenu kontextu zabezpečení pro zabezpečenou relaci.

Určení, že služba používá zabezpečené relace pomocí jedné ze systémových vazeb

  • Nakonfigurujte službu tak, aby používala systémovou vazbu, která podporuje zabezpečení zpráv.

    S výjimkou <základní vazbyHttpBinding> , když jsou systémové vazby nakonfigurované tak, aby používaly zabezpečení zpráv, WCF automaticky používá zabezpečené relace. Následující tabulka uvádí systémové vazby, které podporují zabezpečení zpráv a jestli je zabezpečení zpráv výchozím mechanismem zabezpečení.

    Systémová vazba Element konfigurace Ve výchozím nastavení je zapnuté zabezpečení zpráv.
    BasicHttpBinding <basicHttpBinding> No
    WSHttpBinding <wsHttpBinding> Ano
    WSDualHttpBinding <wsDualHttpBinding> Ano
    WSFederationHttpBinding <wsFederationHttpBinding> Ano
    NetTcpBinding <Nettcpbinding> No
    NetMsmqBinding <Netmsmqbinding> No

    Následující příklad kódu používá konfiguraci k určení vazby s názvem wsHttpBinding_Calculator , která používá <wsHttpBinding>, zabezpečení zpráv a zabezpečené relace.

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

    Následující příklad kódu určuje, že wsHttpBinding><, zabezpečení zpráv a zabezpečené relace se používají k zabezpečení secureCalculator služby.

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

    Poznámka:

    Zabezpečené relace lze pro <wsHttpBinding> vypnout nastavením atributu establishSecurityContext na falsehodnotu . U ostatních systémových vazeb je možné zabezpečené relace vypnout pouze vytvořením vlastní vazby.

Určení, že služba používá zabezpečené relace pomocí vlastní vazby

  • Vytvořte vlastní vazbu, která určuje, že zprávy SOAP jsou chráněny zabezpečenou relací.

    Další informace o vytvoření vlastní vazby naleznete v tématu Postupy: Přizpůsobení vazby poskytované systémem.

    Následující příklad kódu používá konfiguraci k určení vlastní vazby, která zprávy pomocí zabezpečené relace.

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

    Následující příklad kódu vytvoří vlastní vazbu, která používá MutualCertificate režim ověřování ke spuštění zabezpečené relace.

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

Viz také