Freigeben über


Vorgehensweise: Festlegen des Sicherheitsmodus

Die Sicherheit von Windows Communication Foundation (WCF) verfügt über drei allgemeine Sicherheitsmodi, die für die meisten vordefinierten Bindungen gefunden werden: Transport, Nachricht und „Transport mit Nachrichtenanmeldeinformationen“. Zwei zusätzliche Modi sind spezifisch für zwei Bindungen: der Modus „Nur Transportanmeldeinformationen“ im BasicHttpBinding, und der Modus „Beide“ im NetMsmqBinding. 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 finden Sie unter WCF-Sicherheit, siehe Sicherheitsübersicht ,Sichern von Diensten undSichern von Diensten und Clients. Weitere Informationen zum Transportmodus und zur Meldung finden Sie unter Transportsicherheit und Nachrichtensicherheit.

So legen Sie den Sicherheitsmodus im Code fest

  1. Erstellen Sie eine Instanz der Bindungsklasse, die Sie verwenden. Eine Liste der vordefinierten 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.

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

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

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

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

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
    Dim b As 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.

    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    Dim b As 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 Transport-Eigenschaft der ClientCredentialType-Klasse auf einen entsprechenden Wert festlegen, wenn der Modus auf HttpTransportSecurity festgelegt wird.

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

  1. Erstellen Sie eine Instanz der Bindung.

  2. Setzen Sie die Mode-Eigenschaft auf Transport.

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

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    
    Dim b As 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. Setzen Sie die Mode-Eigenschaft auf Message.

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

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    Dim b As 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 <Bindungs>-Element der Konfigurationsdatei ein entsprechendes Bindungselement hinzu. Im folgenden Beispiel wird ein <wsHttpBinding>-Element hinzugefügt.

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

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

  4. Fügen Sie ein Transport<transport>-Element hinzu, und legen Sie das -Attribut auf einen entsprechenden Wert fest, wenn der Modus auf clientCredential 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-Bindung, das NonDualMessageSecurityOverHttp-Objekt).

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

Siehe auch