Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
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.
Legen Sie die
ModeEigenschaft des Objekts fest, das von derSecurityEigenschaft zurückgegeben wird.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportAlternativ 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.MessageOder 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.TransportWithMessageCredentialSie 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
Erstellen Sie eine Instanz der Bindung.
Setzen Sie die
Mode-Eigenschaft aufTransport.Legen Sie die
ClientCredentialEigenschaft auf einen geeigneten Wert fest. Der folgende Code legt die Eigenschaft aufWindows.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
Erstellen Sie eine Instanz der Bindung.
Setzen Sie die
Mode-Eigenschaft aufMessage.Legen Sie die
ClientCredentialEigenschaft auf einen geeigneten Wert fest. Der folgende Code legt die Eigenschaft aufCertificate.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
Fügen Sie dem <bindings>-Element der Konfigurationsdatei ein geeignetes Bindungselement hinzu. Im folgenden Beispiel wird ein <wsHttpBinding-Element> hinzugefügt.
Fügen Sie ein
<binding>Element hinzu, und legen Sie dessennameAttribut auf einen geeigneten Wert fest.Fügen Sie ein
<security>Element hinzu, und legen Sie dasmodeAttribut aufMessage,Transport, oderTransportWithMessageCredential.Wenn der Modus auf
Transportfestgelegt ist, fügen Sie ein<transport>Element hinzu, und legen Sie dasclientCredentialAttribut auf einen entsprechenden Wert fest.Im folgenden Beispiel wird der Modus auf "
Transport"" gesetzt, und anschließend wird dasclientCredentialType-Attribut des<transport>-Elements auf "Windows"" gesetzt.<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" > <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >Alternativ setzen Sie
security modeauf "Message", gefolgt von einem<"message">-Element. In diesem Beispiel setztclientCredentialType"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.