Freigeben über


Vorgehensweise: Festlegen des Sicherheitsmodus

Windows Communication Foundation (WCF) verfügt über drei allgemeine Sicherheitsmodi, die in den meisten vordefinierten Bindungen vorhanden sind: Transport, Message und TransportWithMessageCredential. Zwei weitere Modi sind bindungsspezifisch: "TransportCredentialOnly" ist nur in der BasicHttpBinding und "Both" nur in der NetMsmqBinding verfügbar. In diesem Thema werden jedoch die drei allgemeinen Sicherheitsmodi behandelt: Transport, Message und TransportWithMessageCredential.

Diese Modi werden nicht von allen vordefinierten Bindungen unterstützt. In diesem Thema wird der Modus mit der WSHttpBinding-Klasse und mit der NetTcpBinding-Klasse festgelegt, und es wird veranschaulicht, wie der Modus programmgesteuert und in der Konfiguration festgelegt werden kann.

Weitere Informationen über zur WCF-Sicherheit finden Sie unter Sicherheitsübersicht, Sichern von Diensten und Sichern von Diensten und Clients. Weitere Informationen über zu Transportmodus und -nachricht finden Sie unter Transportsicherheit und Nachrichtensicherheit in WCF.

So legen Sie den Sicherheitsmodus im Code fest

  1. Erstellen Sie eine Instanz der Bindungsklasse, die Sie verwenden. Eine Liste vordefinierter Bindungen finden Sie unter Vom System bereitgestellte Bindungen. In diesem Codebeispiel wird eine Instanz der WSHttpBinding-Klasse erstellt.

  2. Legen Sie die Mode-Eigenschaft des Objekts fest, das von der Security-Eigenschaft zurückgegeben wird.

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    

    Sie können den Modus auch auf Message festlegen, wie im folgenden Code veranschaulicht wird.

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    

    Sie können den Modus auch auf TransportWithMessageCredentials festlegen, wie im folgenden Code veranschaulicht wird.

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
  3. Sie können den Modus auch im Konstruktor der Bindung festlegen, wie im folgenden Codebeispiel veranschaulicht wird.

    Dim b As New WSHttpBinding(SecurityMode.Message)
    
    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    

Festlegen der ClientCredentialType-Eigenschaft

Durch Festlegen des Modus auf einen der drei Werte wird bestimmt, wie Sie die ClientCredentialType-Eigenschaft festlegen können. Wenn Sie beispielsweise die WSHttpBinding-Klasse verwenden, müssen Sie die ClientCredentialType-Eigenschaft der HttpTransportSecurity-Klasse auf einen entsprechenden Wert festlegen, wenn der Modus auf Transport festgelegt wird.

So legen Sie die ClientCredentialType-Eigenschaft für den Transport-Modus fest

  1. Erstellen Sie eine Instanz der Bindung.

  2. Legen Sie die Mode-Eigenschaft auf Transport fest.

  3. Legen Sie für die ClientCredential-Eigenschaft einen geeigneten Wert fest. Im folgenden Code wird die Eigenschaft auf Windows festgelegt.

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    

So legen Sie die ClientCredentialType-Eigenschaft für den Message-Modus fest

  1. Erstellen Sie eine Instanz der Bindung.

  2. Legen Sie die Mode-Eigenschaft auf Message fest.

  3. Legen Sie für die ClientCredential-Eigenschaft einen geeigneten Wert fest. Im folgenden Code wird die Eigenschaft auf Certificate festgelegt.

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    

So legen Sie die Mode-Eigenschaft und die ClientCredentialType-Eigenschaft in der Konfiguration fest

  1. Fügen Sie dem <bindings>-Element der Konfigurationsdatei ein entsprechendes Bindungselement hinzu. Im folgenden Beispiel wird ein <wsHttpBinding>-Element hinzugefügt.

  2. Fügen Sie ein <binding>name-Element hinzu, und legen Sie das -Attribut auf einen geeigneten Wert fest.

  3. Fügen Sie ein <security>mode-Element hinzu, und legen Sie das Message-Attribut auf Transport, TransportWithMessageCredential oder fest.

  4. Fügen Sie ein <transport>clientCredential-Element hinzu, und legen Sie das -Attribut auf einen entsprechenden Wert fest, wenn der Modus auf Transport festgelegt ist.

    Im folgenden Beispiel wird der Modus auf "Transport" festgelegt, und anschließend wird das clientCredentialType-Attribut des <transport>-Elements auf "Windows" festgelegt.

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" />
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Sie können auch den security mode auf "Message" festlegen und anschließend ein <"message">-Element angeben. Im folgenden Beispiel wird der clientCredentialType auf Certificate festgelegt.

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" />
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Die Verwendung des TransportWithMessageCredential-Werts unterliegt besonderen Bedingungen, die nachfolgend beschrieben werden.

Verwenden von TransportWithMessageCredential

Wenn Sie den Sicherheitsmodus auf TransportWithMessageCredential festlegen, wird der tatsächliche Mechanismus, der die Sicherheitseinstellungen auf Transportebene bereitstellt, vom Transport bestimmt. Beispielsweise verwendet das HTTP-Protokoll Secure Sockets Layer (SSL) über HTTP (HTTPS). Daher werden alle Festlegungen der ClientCredentialType-Eigenschaft eines Transportsicherheitsobjekts (z. B. HttpTransportSecurity) ignoriert. Dies bedeutet, dass Sie nur den ClientCredentialType des Nachrichtensicherheitsobjekts festlegen können (für die WSHttpBinding das NonDualMessageSecurityOverHttp-Objekt).

Weitere Informationen finden Sie unter Vorgehensweise: Verwenden von Transportsicherheit und Nachrichtenanmeldeinformationen.

Siehe auch

Aufgaben

Vorgehensweise: Konfigurieren eines Anschlusses mit einem SSL-Zertifikat
Vorgehensweise: Verwenden von Transportsicherheit und Nachrichtenanmeldeinformationen

Konzepte

Nachrichtensicherheit in WCF
Sicherheitsübersicht
Vom System bereitgestellte Bindungen

Weitere Ressourcen

Transportsicherheit
<security> of <wsHttpBinding>
<security> of <basicHttpBinding>
<security> of <netTcpBinding>