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
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.
Legen Sie die
Mode
-Eigenschaft des Objekts fest, das von derSecurity
-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
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
Erstellen Sie eine Instanz der Bindung.
Setzen Sie die
Mode
-Eigenschaft aufTransport
.Legen Sie für die
ClientCredential
-Eigenschaft einen geeigneten Wert fest. Im folgenden Code wird die Eigenschaft aufWindows
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
Erstellen Sie eine Instanz der Bindung.
Setzen Sie die
Mode
-Eigenschaft aufMessage
.Legen Sie für die
ClientCredential
-Eigenschaft einen geeigneten Wert fest. Im folgenden Code wird die Eigenschaft aufCertificate
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
Fügen Sie dem <Bindungs>-Element der Konfigurationsdatei ein entsprechendes Bindungselement hinzu. Im folgenden Beispiel wird ein <wsHttpBinding>-Element hinzugefügt.
Fügen Sie ein
<binding>
-Element hinzu, und legen Sie dasname
-Attribut auf einen passenden Wert fest.Fügen Sie ein
<security>
-Element hinzu, und legen Sie dasmode
-Attribut aufMessage
,Transport
oderTransportWithMessageCredential
fest.Fügen Sie ein
Transport
<transport>
-Element hinzu, und legen Sie das -Attribut auf einen entsprechenden Wert fest, wenn der Modus aufclientCredential
festgelegt ist.Im folgenden Beispiel wird der Modus auf "
Transport"
festgelegt, und anschließend wird dasclientCredentialType
-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 derclientCredentialType
aufCertificate"
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.