Integrierte Windows-Authentifizierung mit erweitertem SchutzIntegrated Windows Authentication with Extended Protection

Es wurden Verbesserungen vorgenommen, die beeinflussen, wie die integrierte Windows-Authentifizierung durch HttpWebRequest, HttpListener, SmtpClient, SslStream, NegotiateStream und verknüpfte Klassen in System.Net sowie verknüpfte Namespaces behandelt wird.Enhancements were made that affect how integrated Windows authentication is handled by the HttpWebRequest, HttpListener, SmtpClient, SslStream, NegotiateStream, and related classes in the System.Net and related namespaces. Unterstützung für erweiterten Schutz wurde zur Verbesserung der Sicherheit hinzugefügt.Support was added for extended protection to enhance security.

Diese Änderungen können sich auf Anwendungen auswirken, die diese Klassen für Webanforderungen und den Empfang der Antworten verwenden, in denen die integrierte Windows-Authentifizierung verwendet wird.These changes can affect applications that use these classes to make web requests and receive responses where integrated Windows authentication is used. Die Änderung kann sich auch auf Webserver und Clientanwendungen auswirken, die für die Verwendung der integrierten Windows-Authentifizierung konfiguriert sind.This change can also impact web servers and client applications that are configured to use integrated Windows authentication.

Zudem können sich die Änderungen auf Anwendungen auswirken, die diese Klassen für andere Anforderungstypen verwenden und Antworten erhalten, in denen die integrierte Windows-Authentifizierung verwendet wird.These changes can also affect applications that use these classes to make other types of requests and receive responses where integrated Windows authentication is used.

Die Änderungen zur Unterstützung des erweiterten Schutzes sind nur für Anwendungen verfügbar, die Windows 7 und Windows Server 2008 R2 ausführen.The changes to support extended protection are available only for applications on Windows 7 and Windows Server 2008 R2. Die erweiterten Schutzfunktionen sind nicht für frühere Windows-Versionen verfügbar.The extended protection features are not available on earlier versions of Windows.

ÜbersichtOverview

Durch die Gestaltung der integrierten Windows-Authentifizierung sind einige Abfragerückmeldungen zu Anmeldeinformationen universell, d.h. sie können wiederverwendet oder weitergeleitet werden.The design of integrated Windows authentication allows for some credential challenge responses to be universal, meaning they can be re-used or forwarded. Die Abfragerückmeldungen sollten so konstruiert sein, dass sie mindestens über zielspezifische Informationen verfügen, vorzugsweise auch über einige kanalspezifische Informationen.The challenge responses should be constructed at a minimum with target specific information and preferably also with some channel specific information. Der erweiterte Schutz kann dann von Diensten bereitgestellt werden, damit Abfragerückmeldungen zu Anmeldeinformationen auch sicher dienstspezifische Informationen, wie z.B. einen Dienstprinzipalnamen (Service Principal Name, SPN), enthalten.Services can then provide extended protection to ensure that credential challenge responses contain service specific information such as a Service Principal Name (SPN). Enthält der Austausch von Anmeldedaten diese Informationen, können die Dienste besser vor einer böswilligen Verwendung von Abfragerückmeldungen zu Anmeldeinformationen schützen, die möglicherweise nicht ordnungsgemäß verwendet wurden.With this information in the credential exchanges, services are able to better protect against malicious use of credential challenge responses that might have been improperly used.

Die Gestaltung des erweiterten Schutzes stellt eine Verbesserung der Authentifizierungsprotokolle dar, um Relay-Angriffe auf die Authentifizierung zu verringern.The extended protection design is an enhancement to authentication protocols designed to mitigate authentication relay attacks. Sie basiert auf Kanalbindungs- und Dienstbindungsinformationen.It revolves around the concept of channel and service binding information.

Die Hauptziele lauten wie folgt:The overall objectives are the following:

  1. Unterstützt der Client nach der Aktualisierung den erweiterten Schutz, sollten die Anwendungen allen unterstützten Authentifizierungsprotokollen Kanalbindungs- und Dienstbindungsinformationen bereitstellen.If the client is updated to support the extended protection, applications should supply a channel binding and service binding information to all supported authentication protocols. Kanalbindungsinformationen können nur bereitgestellt werden, wenn ein Kanal (TLS) vorhanden ist, an den sie sich binden können.Channel binding information can only be supplied when there is a channel (TLS) to bind to. Dienstbindungsinformationen sollten immer bereitgestellt werden.Service binding information should always be supplied.

  2. Aktualisierte und ordnungsgemäß konfigurierte Server überprüfen möglicherweise die Kanalbindungs- und die Dienstbindungsinformationen, wenn sie im Clientauthentifizierungstoken vorhanden sind. Stimmen die Kanalbindungen nicht überein, wird der Authentifizierungsversuch abgelehnt.Updated servers which are properly configured may verify the channel and service binding information when it is present in the client authentication token and reject the authentication attempt if the channel bindings do not match. Je nach Bereitstellungsszenario überprüfen die Server möglicherweise die Kanalbindung, die Dienstbindung oder beides.Depending on the deployment scenario, servers may verify channel binding, service binding or both.

  3. Aktualisierte Server können abwärtskompatible Clientanforderungen, die die Kanalbindungsinformationen der Richtlinie nicht enthalten, annehmen oder ablehnen.Updated servers have the ability to accept or reject down-level client requests that do not contain the channel binding information based on policy.

Die durch den erweiterten Schutz verwendeten Informationen bestehen aus einem oder beiden der folgenden zwei Elemente:Information used by extended protection consists of one or both of the following two parts:

  1. einem Kanalbindungstoken oder CBT (Channel Binding Token)A Channel Binding Token or CBT.

  2. Dienstbindungsinformationen in Form eines Dienstprinzipalnamens oder SPN (Service Principal Name)Service Binding information in the form of a Service Principal Name or SPN.

Dienstbindungsinformationen deuten darauf hin, dass sich ein Client bei einem bestimmten Dienstendpunkt authentifizieren möchte.Service Binding information is an indication of a client’s intent to authenticate to a particular service endpoint. Sie werden mit den folgenden Eigenschaften vom Client zum Server übermittelt:It is communicated from client to server with the following properties:

  • Der SPN-Wert muss für den Server, der die Clientauthentifizierung durchführt, als Klartext verfügbar sein.The SPN value must be available to the server performing client authentication in clear text form.

  • Der SPN-Wert ist öffentlich.The value of the SPN is public.

  • Der SPN muss während der Übertragung kryptografisch geschützt sein, damit der Wert bei einem Man-in-the-Middle-Angriff nicht eingefügt, entfernt oder geändert werden kann.The SPN must be cryptographically protected in transit such that a man-in-the-middle attack cannot insert, remove or modify its value.

Ein CBT ist eine Eigenschaft des gesicherten Außenkanals (z.B. TLS), die zur Kopplung (Bindung) an eine Konversation über einen clientauthentifizierten Innenkanal verwendet wird.A CBT is a property of the outer secure channel (such as TLS) used to tie (bind) it to a conversation over an inner, client-authenticated channel. Das CBT muss über die folgenden Eigenschaften verfügen (auch durch IETF RFC 5056 definiert):The CBT must have the following properties (also defined by IETF RFC 5056):

  • Ist ein Außenkanal vorhanden, muss der CBT-Wert eine Eigenschaft sein, die entweder den Außenkanal oder den Serverendpunkt identifiziert. Sie muss auf beiden Seiten der Konversation unabhängig empfangen werden, sowohl beim Client als auch beim Server.When an outer channel exists, the value of the CBT must be a property identifying either the outer channel or the server endpoint, independently arrived at by both client and server sides of a conversation.

  • Der Wert des vom Client gesendeten CBT darf nicht von einem Angreifer beeinflusst werden können.Value of the CBT sent by the client must not be something an attacker can influence.

  • Es kann nicht garantiert werden, dass der CBT-Wert geheim bleibt.No guarantees are made about secrecy of the CBT value. Dies bedeutet jedoch nicht, dass der Wert der Dienstbindungs- sowie der Kanalbindungsinformationen immer von einem beliebigen anderen Server als dem überprüft werden kann, der die Authentifizierung ausführt. Das Protokoll, das das CBT enthält, verschlüsselt ihn möglicherweise.This does not however mean that the value of the service binding as well as channel binding information can always be examined by any other but the server performing authentication, as the protocol carrying the CBT may be encrypting it.

  • Das CBT muss während der Übertragung kryptografisch geschützt sein, damit der Wert von einem Angreifer nicht eingefügt, entfernt oder geändert werden kann.The CBT must be cryptographically integrity protected in transit such that an attacker cannot insert, remove or modify its value.

Die Kanalbindung erfolgt durch den Client, der den SPN und das CBT manipulationsgeschützt an den Server überträgt.Channel binding is accomplished by the client transferring the SPN and the CBT to the server in a tamperproof fashion. Der Server überprüft die Kanalbindungsinformationen anhand der Richtlinie und lehnt Authentifizierungsversuche ab, die er als nicht an ihn gerichtet einstuft.The server validates the channel binding information in accordance with its policy and rejects authentication attempts for which it does not believe itself to have been the intended target. So werden die beiden Kanäle kryptografisch miteinander verbunden.This way, the two channels become cryptographically bound together.

Damit die Kompatibilität mit vorhandenen Clients und Anwendungen erhalten bleibt, kann ein Server so konfiguriert werden, dass er Authentifizierungsversuche von Clients zulässt, die noch nicht den erweiterten Schutz unterstützen.To preserve compatibility with existing clients and applications, a server may be configured to allow authentication attempts by clients that do not yet support extended protection. Diese Konfiguration wird als „teilweise gehärtet“ bezeichnet, im Gegensatz zu einer „vollständig gehärteten“ Konfiguration.This is referred to as a "partially hardened" configuration, in contrast to a "fully hardened" configuration.

Mehrere Komponenten der Namespaces System.Net und System.Net.Security führen die integrierte Windows-Authentifizierung für eine aufrufende Anwendung aus.Multiple components in the System.Net and System.Net.Security namespaces perform integrated Windows authentication on behalf of a calling application. In diesem Abschnitt werden die erforderlichen Änderungen an System.Net-Komponenten beschrieben, um den erweiterten Schutz ihrer Verwendung der integrierten Windows-Authentifizierung hinzuzufügen.This section describes changes to System.Net components to add extended protection in their use of integrated Windows authentication.

Der erweiterte Schutz wird derzeit für Windows 7 unterstützt.Extended protection is currently supported on Windows 7. Über einen bereitgestellten Mechanismus ermittelt eine Anwendung, ob das Betriebssystem den erweiterten Schutz unterstützt.A mechanism is provided so an application can determine if the operating system supports extended protection.

Erforderliche Änderungen für den erweiterten SchutzChanges to Support Extended Protection

Der bei der integrierten Windows-Authentifizierung verwendete Authentifizierungsvorgang enthält je nach Authentifizierungsprotokoll häufig eine Abfrage, die vom Zielcomputer ausgegeben und an den Clientcomputer zurückgesendet wird.The authentication process used with integrated Windows authentication, depending on the authentication protocol used, often includes a challenge issued by the destination computer and sent back to the client computer. Der erweiterte Schutz fügt diesem Authentifizierungsvorgang neue Funktionen hinzu.Extended protection adds new features to this authentication process

Der Namespace System.Security.Authentication.ExtendedProtection stellt Unterstützung für die Authentifizierung mit erweitertem Schutz für Anwendungen bereit.The System.Security.Authentication.ExtendedProtection namespace provides support for authentication using extended protection for applications. In diesem Namespace stellt die Klasse ChannelBinding die Kanalbindung dar.The ChannelBinding class in this namespace represents a channel binding. Die Klasse ExtendedProtectionPolicy stellt in diesem Namespace die erweiterte Schutzrichtlinie dar, die vom Server zur Validierung eingehender Clientverbindungen verwendet wird.The ExtendedProtectionPolicy class in this namespace represents the extended protection policy used by the server to validate incoming client connections. Andere Klassenmember werden mit erweitertem Schutz verwendet.Other class members are used with extended protection.

Bei Serveranwendungen beinhalten diese Klassen:For server applications, these classes include the following:

Eine ExtendedProtectionPolicy mit den folgenden Elementen:A ExtendedProtectionPolicy that has the following elements:

  • Eine OSSupportsExtendedProtection-Eigenschaft, die angibt, ob das Betriebssystem die integrierte Windows-Authentifizierung mit erweitertem Schutz unterstützt.An OSSupportsExtendedProtection property that indicates whether the operating system supports integrated windows authentication with extended protection.

  • Ein PolicyEnforcement-Wert, der angibt, wann die erweiterte Schutzrichtlinie erzwungen werden soll.A PolicyEnforcement value that indicates when the extended protection policy should be enforced.

  • Ein ProtectionScenario-Wert, der das Bereitstellungsszenario angibt.A ProtectionScenario value that indicates the deployment scenario. Dieser wirkt sich darauf aus, wie der erweiterte Schutz aktiviert wird.This influences how extended protection is checked.

  • Eine optionale ServiceNameCollection mit der benutzerdefinierten SPN-Liste für einen Abgleich mit dem vom Client bereitgestellten SPN als beabsichtigtem Ziel der Authentifizierung.An optional ServiceNameCollection that contains the custom SPN list that is used to match against the SPN provided by the client as the intended target of the authentication.

  • Eine optionale ChannelBinding mit einer benutzerdefinierten Kanalbindung zur Validierung.An optional ChannelBinding that contains a custom channel binding to use for validation. Dies ist kein häufiges Szenario.This scenario is not a common case

Der Namespace System.Security.Authentication.ExtendedProtection.Configuration stellt Unterstützung für die Konfiguration der Authentifizierung mit erweitertem Schutz für Anwendungen bereit.The System.Security.Authentication.ExtendedProtection.Configuration namespace provides support for configuration of authentication using extended protection for applications.

Bei einer Reihe von Funktionen wurden Änderungen vorgenommen, um den erweiterten Schutz im vorhandenen Namespace System.Net zu unterstützen.A number of feature changes were made to support extended protection in the existing System.Net namespace. Dazu gehören folgende Änderungen:These changes include the following:

Eine Funktionsänderung wurde vorgenommen, um den erweiterten Schutz für SMTP-Clientanwendungen im vorhandenen Namespace System.Net.Mail zu unterstützen:A feature change was made to support extended protection for SMTP client applications in the existing System.Net.Mail namespace:

  • Eine TargetName-Eigenschaft in der Klasse SmtpClient, die den zur Authentifizierung verwendeten SPN bei der Verwendung des erweiterten Schutzes in SMTP-Clientanwendungen darstellt.A TargetName property in the SmtpClient class that represents the SPN to use for authentication when using extended protection for SMTP client applications.

Bei einer Reihe von Funktionen wurden Änderungen vorgenommen, um den erweiterten Schutz im vorhandenen Namespace System.Net.Security zu unterstützen.A number of feature changes were made to support extended protection in the existing System.Net.Security namespace. Dazu gehören folgende Änderungen:These changes include the following:

Eine SmtpNetworkElement-Eigenschaft wurde hinzugefügt, um die Konfiguration des erweiterten Schutzes für SMTP-Clients im Namespace System.Net.Security zu unterstützen.A SmtpNetworkElement property was added to support configuration of extended protection for SMTP clients in the System.Net.Security namespace.

Erweiterter Schutz für ClientanwendungenExtended Protection for Client Applications

Der erweiterte Schutz wird bei den meisten Clientanwendungen automatisch unterstützt.Extended protection support for most client applications happens automatically. Die Klassen HttpWebRequest und SmtpClient unterstützen den erweiterten Schutz, wenn die zugrunde liegende Windows-Version den erweiterten Schutz unterstützt.The HttpWebRequest and SmtpClient classes support extended protection whenever the underlying version of Windows supports extended protection. Eine HttpWebRequest-Instanz sendet einen SPN, der aus dem Uri erstellt wird.An HttpWebRequest instance sends an SPN constructed from the Uri. Eine SmtpClient-Instanz sendet standardmäßig einen SPN, der aus dem Hostnamen des SMTP-Mailservers erstellt wird.By default, an SmtpClient instance sends an SPN constructed from the host name of the SMTP mail server.

Clientanwendungen können zur benutzerdefinierten Authentifizierung die Methoden HttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext) oder HttpWebRequest.GetRequestStream(TransportContext) in der Klasse HttpWebRequest verwenden, die den TransportContext und das CBT mithilfe der Methode GetChannelBinding abrufen.For custom authentication, client applications can use the HttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext) or HttpWebRequest.GetRequestStream(TransportContext) methods in the HttpWebRequest class that allow retrieving the TransportContext and the CBT using the GetChannelBinding method.

Sie können den von einer HttpWebRequest-Instanz an einen bestimmten Server gesendeten SPN zur integrierten Windows-Authentifizierung überschreiben, indem Sie die Eigenschaft CustomTargetNameDictionary festlegen.The SPN to use for integrated Windows authentication sent by an HttpWebRequest instance to a given service can be overridden by setting the CustomTargetNameDictionary property.

Mit der Eigenschaft TargetName kann ein benutzerdefinierter SPN zur integrierten Windows-Authentifizierung für die SMTP-Verbindung festgelegt werden.The TargetName property can be used to set a custom SPN to use for integrated Windows authentication for the SMTP connection.

Erweiterter Schutz für ServeranwendungenExtended Protection for Server Applications

HttpListener stellt automatisch Mechanismen zur Validierung von Dienstbindungen bereit, wenn die HTTP-Authentifizierung ausgeführt wird.HttpListener automatically provides mechanisms for validating service bindings when performing HTTP authentication.

Das sicherste Szenario ist die Aktivierung des erweiterten Schutzes für die Präfixe „HTTPS://“.The most secure scenario is to enable extended protection for HTTPS:// prefixes. Legen Sie in diesem Fall HttpListener.ExtendedProtectionPolicy auf eine ExtendedProtectionPolicy mit PolicyEnforcement auf WhenSupported oder Always fest sowie ProtectionScenario auf TransportSelected. Ein Wert von WhenSupported versetzt HttpListener in den teilweise gehärteten Modus, während Always dem vollständig gehärteten Modus entspricht.In this case, set HttpListener.ExtendedProtectionPolicy to an ExtendedProtectionPolicy with PolicyEnforcement set to WhenSupported or Always, and ProtectionScenario set to TransportSelected A value of WhenSupported puts HttpListener in partially hardened mode, while Always corresponds to fully hardened mode.

Wird in dieser Konfiguration eine Anforderung über einen sicheren Außenkanal an den Server gesendet, wird der Außenkanal nach einer Kanalbindung abgefragt.In this configuration when a request is made to the server through an outer secure channel, the outer channel is queried for a channel binding. Diese Kanalbindung wird an die SSPI-Authentifizierungsaufrufe übergeben, die überprüfen, ob die Kanalbindung im Authentifizierungsblob übereinstimmt.This channel binding is passed to the authentication SSPI calls, which validate that the channel binding in the authentication blob matches. Es gibt drei mögliche Ergebnisse:There are three possible outcomes:

  1. Das zugrunde liegende Betriebssystem des Servers unterstützt den erweiterten Schutz nicht.The server’s underlying operating system does not support extended protection. Die Anforderung wird der Anwendung nicht verfügbar gemacht, und die Antwort „Nicht autorisiert (401).“ wird an den Client zurückgegeben.The request will not be exposed to the application, and an unauthorized (401) response will be returned to the client. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.A message will be logged to the HttpListener trace source specifying the reason for the failure.

  2. Es tritt beim SSPI-Aufruf ein Fehler auf. Dies bedeutet entweder, dass die vom Client angegebene Kanalbindung nicht mit dem erwarteten Wert übereinstimmt, der aus dem Außenkanal abgerufen wurde, oder dass der Client bei der Konfiguration der erweiterten Schutzrichtlinie auf dem Server für Always keine Kanalbindung bereitgestellt hat.The SSPI call fails indicating that either the client specified a channel binding that did not match the expected value retrieved from the outer channel or the client failed to supply a channel binding when the extended protection policy on the server was configured for Always. In beiden Fällen wird die Anforderung der Anwendung nicht verfügbar gemacht, und die Antwort „Nicht autorisiert (401)“ wird an den Client zurückgegeben.In both cases, the request will not be exposed to the application, and an unauthorized (401) response will be returned to the client. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.A message will be logged to the HttpListener trace source specifying the reason for the failure.

  3. Der Client gibt die richtige Kanalbindung an oder kann ohne Angabe einer Kanalbindung die Verbindung herstellen, da die erweiterte Schutzrichtlinie auf dem Server mit WhenSupported konfiguriert ist. Die Anforderung wird für die Verarbeitung an die Anwendung zurückgegeben.The client specifies the correct channel binding or is allowed to connect without specifying a channel binding since the extended protection policy on the server is configured with WhenSupported The request is returned to the application for processing. Die Dienstnamenüberprüfung wird nicht automatisch ausgeführt.No service name check is performed automatically. Eine Anwendung führt möglicherweise eine eigene Überprüfung des Dienstnamens mithilfe der ServiceName-Eigenschaft durch. Dies ist unter diesen Umständen jedoch redundant.An application may choose to perform its own service name validation using the ServiceName property, but under these circumstances it is redundant.

Führt eine Anwendung eigene SSPI-Aufrufe zur Durchführung der Authentifizierung auf der Basis von Blobs durch, die im Text einer HTTP-Anforderung ausgetauscht werden, und ist eine Unterstützung der Kanalbindung erwünscht, muss die Anwendung die erwartete Kanalbindung vom sicheren Außenkanal mithilfe von HttpListener abrufen, um sie an die native Win32-Funktion AcceptSecurityContext zu übergeben.If an application makes its own SSPI calls to perform authentication based on blobs passed back and forth within the body of an HTTP request and wishes to support channel binding, it needs to retrieve the expected channel binding from the outer secure channel using HttpListener in order to pass it to native Win32 AcceptSecurityContext function. Verwenden Sie hierfür die Eigenschaft TransportContext, und rufen Sie zum Abrufen des CBT die Methode GetChannelBinding auf.To do this, use the TransportContext property and call GetChannelBinding method to retrieve the CBT. Nur Endpunktbindungen werden unterstützt.Only endpoint bindings are supported. Wird etwas anderes als Endpoint angegeben, wird eine NotSupportedException ausgelöst.If anything other Endpoint is specified, a NotSupportedException will be thrown. Unterstützt das zugrunde liegende Betriebssystem die Kanalbindung, gibt die Methode GetChannelBinding ein ChannelBindingSafeHandle zurück, das einen Zeiger mit einer Kanalbindung umschließt, die an die Funktion AcceptSecurityContext als im Parameter pInput übergebener Member „PvBuffer“ einer Struktur „SecBuffer“ übergeben wird.If the underlying operating system supports channel binding, the GetChannelBinding method will return a ChannelBindingSafeHandle wrapping a pointer to a channel binding suitable for passing to AcceptSecurityContext function as the pvBuffer member of a SecBuffer structure passed in the pInput parameter. Die Eigenschaft Size enthält die Länge der Kanalbindung in Bytes.The Size property contains the length, in bytes, of the channel binding. Unterstützt das zugrunde liegende Betriebssystem keine Kanalbindungen, gibt die Funktion null zurück.If the underlying operating system does not support channel bindings, the function will return null.

Ein anderes mögliches Szenario ist die Aktivierung des erweiterten Schutz für die Präfixe „HTTP://“, wenn keine Proxys verwendet werden.Another possible scenario is to enable extended protection for HTTP:// prefixes when proxies are not used. Legen Sie in diesem Fall HttpListener.ExtendedProtectionPolicy auf ExtendedProtectionPolicy fest, für das PolicyEnforcement auf WhenSupported oder Always festgelegt ist, sowie ProtectionScenario auf TransportSelected. Ein Wert von WhenSupported versetzt HttpListener in den teilweise gehärteten Modus, während Always dem vollständig gehärteten Modus entspricht.In this case, set HttpListener.ExtendedProtectionPolicy to an ExtendedProtectionPolicy with PolicyEnforcement set to WhenSupported or Always, and ProtectionScenario set to TransportSelected A value of WhenSupported puts HttpListener in partially hardened mode, while Always corresponds to fully hardened mode.

Eine Standardliste mit den zulässigen Dienstnamen wird auf Grundlage der Präfixe erstellt, die mit HttpListener registriert wurden.A default list of allowed service names is created based on the prefixes which have been registered with the HttpListener. Diese Standardliste kann mit der Eigenschaft DefaultServiceNames überprüft werden.This default list can be examined through the DefaultServiceNames property. Ist die Liste nicht vollständig, kann eine Anwendung im Konstruktor für die Klasse ExtendedProtectionPolicy eine benutzerdefinierte Dienstnamensammlung angeben, die anstelle der Standard-Dienstnamenliste verwendet wird.If this list is not comprehensive, an application can specify a custom service name collection in the constructor for the ExtendedProtectionPolicy class which will be used instead of the default service name list.

Wird in dieser Konfiguration eine Anforderung ohne sicheren Außenkanal an den Server gesendet, erfolgt die Authentifizierung üblicherweise ohne Überprüfung der Kanalbindung.In this configuration, when a request is made to the server without an outer secure channel authentication proceeds normally without a channel binding check. Bei erfolgreicher Authentifizierung wird der Kontext nach dem vom Client bereitgestellten Dienstnamen abgefragt und anhand der Liste der zulässigen Dienstnamen überprüft.If the authentication succeeds, the context is queried for the service name that the client provided and validated against the list of acceptable service names. Es gibt vier mögliche Ergebnisse:There are four possible outcomes:

  1. Das zugrunde liegende Betriebssystem des Servers unterstützt den erweiterten Schutz nicht.The server’s underlying operating system does not support extended protection. Die Anforderung wird der Anwendung nicht verfügbar gemacht, und die Antwort „Nicht autorisiert (401).“ wird an den Client zurückgegeben.The request will not be exposed to the application, and an unauthorized (401) response will be returned to the client. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.A message will be logged to the HttpListener trace source specifying the reason for the failure.

  2. Das zugrunde liegende Betriebssystem des Clients unterstützt den erweiterten Schutz nicht.The client’s underlying operating system does not support extended protection. Der Authentifizierungsversuch wird in der WhenSupported-Konfiguration erfolgreich ausgeführt, und die Anforderung wird an die Anwendung zurückgegeben.In the WhenSupported configuration, the authentication attempt will succeed and the request will be returned to the application. Es tritt in der Always-Konfiguration beim Authentifizierungsversuch ein Fehler auf.In the Always configuration, the authentication attempt will fail. Die Anforderung wird der Anwendung nicht verfügbar gemacht, und die Antwort „Nicht autorisiert (401).“ wird an den Client zurückgegeben.The request will not be exposed to the application, and an unauthorized (401) response will be returned to the client. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.A message will be logged to the HttpListener trace source specifying the reason for the failure.

  3. Das zugrunde liegende Betriebssystem des Clients unterstützt den erweiterten Schutz, doch in der Anwendung wurde keine Dienstbindung angegeben.The client’s underlying operating system supports extended protection, but the application did not specify a service binding. Die Anforderung wird der Anwendung nicht verfügbar gemacht, und die Antwort „Nicht autorisiert (401).“ wird an den Client zurückgegeben.The request will not be exposed to the application, and an unauthorized (401) response will be returned to the client. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.A message will be logged to the HttpListener trace source specifying the reason for the failure.

  4. Es wurde vom Client eine Dienstbindung angegeben.The client specified a service binding. Die Dienstbindung wird mit der Liste der zulässigen Dienstbindungen verglichen.The service binding is compared to the list of allowed service bindings. Bei einer Übereinstimmung wird die Anforderung an die Anwendung zurückgegeben.If it matches, the request is returned to the application. Andernfalls wird die Anforderung der Anwendung nicht verfügbar gemacht, und die Antwort „Nicht autorisiert (401)“ wird automatisch an den Client zurückgegeben.Otherwise, the request will not be exposed to the application, and an unauthorized (401) response will be automatically returned to the client. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.A message will be logged to the HttpListener trace source specifying the reason for the failure.

Reicht diese einfache Vorgehensweise mit einer Liste aus zulässigen Dienstnamen nicht aus, kann eine Anwendung durch Abfragen der Eigenschaft ServiceName möglicherweise eine eigene Überprüfung der Dienstnamen bereitstellen.If this simple approach using an allowed list of acceptable service names is insufficient, an application may provide its own service name validation by querying the ServiceName property. Im 1. und 2. Fall gibt die Eigenschaft null zurück.In cases 1 and 2 above, the property will return null. Im 3. Fall wird eine leere Zeichenfolge zurückgegeben.In case 3, it will return an empty string. Im 4. Fall wird der vom Client angegebene Dienstname zurückgegeben.In case 4, the service name specified by the client will be returned.

Diese erweiterten Schutzfunktionen können auch von Serveranwendungen für die Authentifizierung mit anderen Anforderungstypen und bei vertrauenswürdigen Proxys verwendet werden.These extended protection features can also be used by server applications for authentication with other types of requests and when trusted proxies are used.

Siehe auchSee also