Freigeben über


Vorgehensweise: Festlegen des Sicherheitsmodus

Die Sicherheit von Windows Communication Foundation (WCF) verfügt über drei häufig verwendete Sicherheitsmodi, die bei den meisten vordefinierten Bindungen anzutreffen sind: Transport, Nachricht und "Transport mit Nachrichtenanmeldeinformationen". Zwei zusätzliche Modi sind spezifisch für zwei Bindungen: der Modus "Nur Transportanmeldeinformationen" auf der BasicHttpBinding, und der Modus "Beide" auf der NetMsmqBinding. Dieses Thema konzentriert sich jedoch auf die drei gemeinsamen Sicherheitsmodi: Transport, , Messageund TransportWithMessageCredential.

Beachten Sie, dass nicht jede vordefinierte Bindung alle diese Modi unterstützt. In diesem Thema wird der Modus mit den WSHttpBinding und NetTcpBinding Klassen festgelegt und es wird veranschaulicht, wie der Modus sowohl programmgesteuert als auch über Konfiguration festgelegt wird.

Weitere Informationen finden Sie unter WCF-Sicherheit, siehe Sicherheitsübersicht, Sichern von Diensten und Sichern 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 von Ihnen verwendeten Bindungsklasse. Eine Liste der vordefinierten Bindungen finden Sie unter Systembereitgestellte Bindungen. In diesem Beispiel 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
    

    Alternativ können Sie den Modus auf "Nachricht" festlegen, wie im folgenden Code gezeigt.

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

    Oder legen Sie den Modus für den Transport mit Nachrichtenanmeldeinformationen fest, wie im folgenden Code gezeigt.

    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 Code gezeigt.

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

Festlegen der ClientCredentialType-Eigenschaft

Wenn Sie den Modus auf einen der drei Werte festlegen, wird festgelegt, wie Sie die ClientCredentialType Eigenschaft festlegen. Wenn Sie beispielsweise die WSHttpBinding Klasse verwenden, bedeutet die Einstellung des Modus, Transport dass Sie die ClientCredentialType Eigenschaft der HttpTransportSecurity Klasse auf einen geeigneten Wert festlegen müssen.

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

  1. Erstellen Sie eine Instanz der Bindung.

  2. Setzen Sie die Mode-Eigenschaft auf Transport.

  3. Legen Sie die ClientCredential Eigenschaft auf einen geeigneten Wert fest. Der folgende Code legt die Eigenschaft auf Windows.

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

  1. Erstellen Sie eine Instanz der Bindung.

  2. Setzen Sie die Mode-Eigenschaft auf Message.

  3. Legen Sie die ClientCredential Eigenschaft auf einen geeigneten Wert fest. Der folgende Code legt die Eigenschaft auf Certificate.

    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 Eigenschaft "Mode" und "ClientCredentialType" in der Konfiguration fest

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

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

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

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

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

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

    Alternativ setzen Sie security mode auf "Message", gefolgt von einem <"message">-Element. In diesem Beispiel setzt clientCredentialType "Certificate"".

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

    Die Verwendung des TransportWithMessageCredential Werts ist ein Sonderfall und wird unten erläutert.

Verwenden von TransportWithMessageCredential

Beim Einstellen des Sicherheitsmodus auf TransportWithMessageCredential bestimmt der Transport den tatsächlichen Mechanismus, der die Sicherheit auf Transportebene bereitstellt. Beispielsweise verwendet das HTTP-Protokoll Secure Sockets Layer (SSL) über HTTP (HTTPS). Daher wird das Festlegen der Eigenschaft ClientCredentialType eines Transportsicherheitsobjekts (z. B. HttpTransportSecurity) ignoriert. Mit anderen Worten, Sie können nur das ClientCredentialType Nachrichtensicherheitsobjekt (für die WSHttpBinding Bindung, das NonDualMessageSecurityOverHttp Objekt) festlegen.

Weitere Informationen finden Sie unter How to: Use Transport Security and Message Credentials.

Siehe auch