Wählen eines Typs von AnmeldeinformationenSelecting a Credential Type

Anmeldeinformationen sind die Daten, die Windows Communication Foundation (WCF) verwendet wird, um entweder eine beanspruchte Identität bzw. beanspruchte Befähigungen belegt.Credentials are the data Windows Communication Foundation (WCF) uses to establish either a claimed identity or capabilities. Ein Ausweis ist beispielsweise ein mit Anmeldeinformationen vergleichbares Dokument, das ein Staat ausgibt, damit seine Bürger ihre Staatsbürgerschaft nachweisen können.For example, a passport is a credential a government issues to prove citizenship in a country or region. In WCF dauert die Anmeldeinformationen viele Formen annehmen, z. B. Benutzernamentoken und x. 509-Zertifikate.In WCF, credentials can take many forms, such as user name tokens and X.509 certificates. In diesem Thema wird erläutert, Anmeldeinformationen, wie sie in WCF verwendet werden und wie Sie die richtige Anmeldeinformationen für Ihre Anwendung auswählen.This topic discusses credentials, how they are used in WCF, and how to select the right credential for your application.

In vielen Ländern und Regionen ist ein Führerschein ein Beispiel für einen Identitätsnachweis.In many countries and regions, a driver’s license is an example of a credential. Ein Führerschein enthält Daten, die die Identität und erworbene Berechtigungen einer Person nachweisen.A license contains data that represents a person's identity and capabilities. Der rechtmäßige Besitz wird mithilfe eines Bilds des Inhabers nachgewiesen.It contains proof of possession in the form of the possessor's picture. Ein Führerschein oder Ausweis wird von einer vertrauenswürdigen Stelle ausgegeben, in der Regel von einer dafür zuständigen Behörde.The license is issued by a trusted authority, usually a governmental department of licensing. Der Führerschein wird eingeschweißt und enthält ggf. ein Hologramm, wodurch sichergestellt wird, dass er nicht manipuliert oder gefälscht wurde.The license is sealed, and can contain a hologram, showing that it has not been tampered with or counterfeited.

Das Vorlegen eines Identitätsnachweises umfasst das Angeben der Daten und den Nachweis, dass sich die Daten rechtmäßig im Besitz des Inhabers befinden.Presenting a credential involves presenting both the data and proof of possession of the data. WCF unterstützt verschiedene Typen von Anmeldeinformationen auf der Transport- und nachrichtensicherheitsebene.WCF supports a variety of credential types at both the transport and message security levels. Betrachten Sie beispielsweise zwei Typen von Anmeldeinformationen, die in WCF unterstützt: Benutzername und (x. 509) zertifikatsanmeldeinformationen.For example, consider two types of credentials supported in WCF: user name and (X.509) certificate credentials.

Beim Benutzernamenteil der Anmeldeinformationen stellt der Benutzername die beanspruchte Identität und das Kennwort den Nachweis des rechtmäßigen Besitzes dar.For the user name credential, the user name represents the claimed identity and the password provides proof of possession. Die vertrauenswürdige Stelle ist in diesem Fall das System, das den Benutzernamen und das Kennwort überprüft.The trusted authority in this case is the system that validates the user name and password.

Ein x. 509-Zertifikats-Anmeldeinformationen der Antragstellername, Alternativer Antragstellername oder spezielle Felder im Zertifikat genutzt werden Beanspruchung der Identität, während andere Felder wie z. B. die Valid From und Valid To Felder, geben Sie die Gültigkeit der Zertifikat.With an X.509 certificate credential, the subject name, subject alternative name or specific fields within the certificate can be used as claims of identity, while other fields, such as the Valid From and Valid To fields, specify the validity of the certificate.

Transportieren von Anmeldeinformationen-TypenTransport Credential Types

Die folgende Tabelle zeigt die möglichen Typen von Clientanmeldeinformationen, die von einer Bindung im Transportsicherheitsmodus verwendet werden können.The following table shows the possible types of client credentials that can be used by a binding in transport security mode. Legen Sie die ClientCredentialType-Eigenschaft beim Erstellen eines Dienstes auf einen dieser Werte fest, um den Typ der Anmeldeinformationen anzugeben, den der Client zum Kommunizieren mit Ihrem Dienst bereitstellen muss.When creating a service, set the ClientCredentialType property to one of these values to specify the type of credential that the client must supply to communicate with your service. Sie können die Typen entweder im Code oder in Konfigurationsdateien festlegen.You can set the types in either code or configuration files.

EinstellungSetting BeschreibungDescription
KeineNone Gibt an, dass der Client keine Anmeldeinformationen präsentieren muss.Specifies that the client does not need to present any credential. Dies führt zur Verwendung eines anonymen Clients.This translates to an anonymous client.
StandardBasic Gibt die Standardauthentifizierung für den Client an.Specifies basic authentication for the client. Weitere Informationen finden Sie unter RFC 2617 –HTTP Authentication: Basic and Digest Authentication.For additional information, see RFC2617—HTTP Authentication: Basic and Digest Authentication.
DigestDigest Gibt die Hashwertauthentifizierung für den Client an.Specifies digest authentication for the client. Weitere Informationen finden Sie unter RFC 2617 –HTTP Authentication: Basic and Digest Authentication.For additional information, see RFC2617—HTTP Authentication: Basic and Digest Authentication.
NtlmNtlm Gibt die NT-LAN-Managerauthentifizierung (NTLM) an.Specifies NT LAN Manager (NTLM) authentication. Wird verwendet, wenn Sie aus bestimmten Gründen keine Kerberos-Authentifizierung verwenden können.This is used when you cannot use Kerberos authentication for some reason. Sie können die Verwendung als ausweichlösung auch deaktivieren, indem die AllowNtlm Eigenschaft false, die bewirkt, dass WCF nach einer Best-Effort eine Ausnahme auslöst, wenn NTLM verwendet wird.You can also disable its use as a fallback by setting the AllowNtlm property to false, which causes WCF to make a best-effort to throw an exception if NTLM is used. Durch das Festlegen dieser Eigenschaft auf false wird unter Umständen nicht verhindert, dass NTLM-Anmeldeinformationen über die Verbindung gesendet werden.Note that setting this property to false may not prevent NTLM credentials from being sent over the wire.
WindowsWindows Gibt die Windows-Authentifizierung an.Specifies Windows authentication. Um für eine Windows-Domäne nur das Kerberos-Protokoll anzugeben, legen Sie die AllowNtlm-Eigenschaft auf false fest (die Standardeinstellung ist true).To specify only the Kerberos protocol on a Windows domain, set the AllowNtlm property to false (the default is true).
ZertifikatCertificate Führt die Clientauthentifizierung mit einem X.509-Zertifikat aus.Performs client authentication using an X.509 certificate.
KennwortPassword Benutzer müssen einen Benutzernamen und ein Kennwort angeben.User must supply a user name and password. Überprüfen Sie das Benutzername/Kennwort-Paar mithilfe der Windows-Authentifizierung oder einer anderen benutzerdefinierten Lösung.Validate the user name/password pair using Windows authentication or another custom solution.

Typen von Nachrichtenclient-AnmeldeinformationenMessage Client Credential Types

Die folgende Tabelle zeigt die möglichen Typen von Anmeldeinformationen, die Sie beim Erstellen einer Anwendung verwenden können, die die Nachrichtensicherheit nutzt.The following table shows the possible credential types that you can use when creating an application that uses message security. Sie können diese Werte entweder im Code oder in Konfigurationsdateien festlegen.You can use these values in either code or configuration files.

EinstellungSetting BeschreibungDescription
KeineNone Gibt an, dass der Client keine Anmeldeinformationen bereitstellen muss.Specifies that the client does not need to present a credential. Dies führt zur Verwendung eines anonymen Clients.This translates to an anonymous client.
WindowsWindows Ermöglicht unter dem mit Windows-Anmeldeinformationen eingerichteten Sicherheitskontext den Austausch von SOAP-Nachrichten.Allows SOAP message exchanges to occur under the security context established with a Windows credential.
BenutzernameUsername Ermöglicht es dem Dienst zu fordern, dass sich der Client per Benutzername authentifiziert.Allows the service to require that the client be authenticated with a user name credential. Beachten Sie, dass alle kryptografischen Vorgänge mit Benutzernamen wie das Erzeugen einer Signatur oder Verschlüsseln von Daten von WCF nicht zulässig ist.Note that WCF does not allow any cryptographic operations with user names, such as generating a signature or encrypting data. WCF wird sichergestellt, dass der Transport geschützt wird, wenn Benutzernamen-Anmeldeinformationen verwenden.WCF ensures that the transport is secured when using user name credentials.
ZertifikatCertificate Ermöglicht es dem Dienst zu fordern, dass der Client mithilfe eines X.509-Zertifikats authentifiziert wird.Allows the service to require that the client be authenticated using an X.509 certificate.
Ausgestelltes Token (Issued Token)Issued Token Ein benutzerdefinierter nach einer Sicherheitsrichtlinie konfigurierter Tokentyp.A custom token type configured according to a security policy. Der Standardtokentyp ist SAML (Security Assertions Markup Language).The default token type is Security Assertions Markup Language (SAML). Das Token wird von einem sicheren Tokendienst ausgegeben.The token is issued by a secure token service. Weitere Informationen finden Sie unter Verbund und ausgestellte Token.For more information, see Federation and Issued Tokens.

Aushandlungsmodell von DienstanmeldeinformationenNegotiation Model of Service Credentials

Aushandlung versteht man das Einrichten von Vertrauensstellungen zwischen einem Client und einem Dienst durch den Austausch von Anmeldeinformationen.Negotiation is the process of establishing trust between a client and a service by exchanging credentials. Der Prozess wird iterativ zwischen dem Client und dem Dienst durchgeführt, damit jeweils nur die Informationen offengelegt werden, die für den nächsten Schritt des Aushandlungsprozesses erforderlich sind.The process is performed iteratively between the client and the service, so as to disclose only the information necessary for the next step in the negotiation process. In der Praxis ist das Endergebnis die Zustellung der Anmeldeinformationen eines Dienstes an den Client, damit diese bei nachfolgenden Vorgängen verwendet werden können.In practice, the end result is the delivery of a service's credential to the client to be used in subsequent operations.

Mit einer Ausnahme standardmäßig vom System bereitgestellten Bindungen in WCF die Anmeldeinformationen für Dienst aushandeln automatisch bei der Sicherheit auf Nachrichtenebene zu verwenden.With one exception, by default the system-provided bindings in WCF negotiate the service credential automatically when using message-level security. (Die Ausnahme ist die BasicHttpBinding, die die Sicherheit standardmäßig nicht aktiviert.) Um dieses Verhalten zu deaktivieren, können Sie die Eigenschaften NegotiateServiceCredential und NegotiateServiceCredential verwenden.(The exception is the BasicHttpBinding, which does not enable security by default.) To disable this behavior, see the NegotiateServiceCredential and NegotiateServiceCredential properties.

Hinweis

Wenn SSL-Sicherheit mit .NET Framework 3.5 und höher verwendet wird, verwendet ein WCF-Client sowohl die Zwischenzertifikate im Zertifikatspeicher als auch die Zwischenzertifikate, die während der SSL-Verhandlung empfangen, führen Sie die Überprüfung der Zertifikatkette auf des Diensts Zertifikat.When SSL security is used with .NET Framework 3.5 and later, a WCF client uses both the intermediate certificates in its certificate store and the intermediate certificates received during SSL negotiation to perform certificate chain validation on the service's certificate. Bei .NET Framework 3.0 werden nur die im lokalen Zertifikatspeicher installierten Zwischenzertifikate verwendet..NET Framework 3.0 only uses the intermediate certificates installed in the local certificate store.

Out-of-Band-AushandlungOut-of-Band Negotiation

Wenn die automatische Aushandlung deaktiviert ist, müssen die Dienstanmeldeinformationen auf dem Client bereitgestellt werden, bevor Nachrichten an den Dienst gesendet werden.If automatic negotiation is disabled, the service credential must be provisioned at the client prior to sending any messages to the service. Dies ist auch bekannt als ein Out-of-Band- bereitstellen.This is also known as an out-of-band provisioning. Wenn es sich beim angegebenen Typ der Anmeldeinformationen um ein Zertifikat handelt und die automatische Aushandlung deaktiviert ist, muss sich der Client an den Besitzer des Dienstes wenden, um das Zertifikat zu erhalten und auf dem Computer zu installieren, auf dem die Clientanwendung ausgeführt wird.For example, if the specified credential type is a certificate, and automatic negotiation is disabled, the client must contact the service owner to receive and install the certificate on the computer running the client application. Sie können dies zum Beispiel nutzen, wenn Sie genau steuern möchten, welche Clients in einem Business-to-Business-Szenario auf einen Dienst zugreifen können.This can be done, for example, when you want to strictly control which clients can access a service in a business-to-business scenario. Diese Out-des-Band-Aushandlung kann per e-Mail erfolgen, und das x. 509-Zertifikat wird mithilfe eines Tools wie z. B. die Microsoft Management Console (MMC)-Zertifikat-Snap-in in Windows-Zertifikatspeicher gespeichert.This out-of-band-negotiation can be done in email, and the X.509 certificate is stored in Windows certificate store, using a tool such as the Microsoft Management Console (MMC) Certificates snap-in.

Hinweis

Die ClientCredentials-Eigenschaft wird verwendet, um den Dienst mit einem Zertifikat bereitzustellen, das per Out-of-Band-Aushandlung beschafft wurde.The ClientCredentials property is used to provide the service with a certificate that was attained through out-of-band negotiation. Dies ist erforderlich, wenn Sie die BasicHttpBinding-Klasse verwenden, da die Bindung keine automatisierte Aushandlung zulässt.This is necessary when using the BasicHttpBinding class because the binding does not allow automated negotiation. Die Eigenschaft wird auch in einem nicht korrelierten Duplexszenario verwendet.The property is also used in an uncorrelated duplex scenario. Dies ist ein Szenario, bei dem ein Server eine Nachricht an den Client sendet, ohne dass der Client zuerst eine Anforderung an den Server senden muss.This is a scenario where a server sends a message to the client without requiring the client to send a request to the server first. Da der Server nicht über eine Anforderung des Clients verfügt, muss er das Zertifikat des Clients verwenden, um die Nachricht an den Client zu verschlüsseln.Because the server does not have a request from the client, it must use the client's certificate to encrypt the message to the client.

Festlegen der Werte von AnmeldeinformationenSetting Credential Values

Nachdem Sie einen Sicherheitsmodus ausgewählt haben, müssen Sie die eigentlichen Anmeldeinformationen angeben.Once you select a security mode, you must specify the actual credentials. Wenn der Typ der Anmeldeinformationen zum Beispiel auf "Zertifikat" festgelegt ist, müssen Sie dem Dienst bzw. dem Client spezielle Anmeldeinformationen (wie ein spezifisches X.509-Zertifikat) zuordnen.For example, if the credential type is set to "certificate," then you must associate a specific credential (such as a specific X.509 certificate) with the service or client.

Die Methode zum Festlegen des Werts der Anmeldeinformationen unterscheidet sich in Abhängigkeit davon leicht, ob Sie einen Dienst oder einen Client programmieren.Depending on whether you are programming a service or a client, the method for setting the credential value differs slightly.

Festlegen von DienstanmeldeinformationenSetting Service Credentials

Wenn Sie den Transportmodus verwenden und HTTP als Transportart nutzen, müssen Sie entweder Internetinformationsdienste (IIS) verwenden oder den Anschluss mit einem Zertifikat konfigurieren.If you are using transport mode, and you are using HTTP as the transport, you must use either Internet Information Services (IIS) or configure the port with a certificate. Weitere Informationen finden Sie unter Transport Sicherheitsübersicht und HTTP-Transportsicherheit.For more information, see Transport Security Overview and HTTP Transport Security.

Um einen Dienst im Code mit Anmeldeinformationen auszustatten, erstellen Sie eine Instanz der ServiceHost-Klasse und geben die geeigneten Anmeldeinformationen an, indem Sie die ServiceCredentials-Klasse verwenden, auf die mithilfe der Credentials-Eigenschaft zugegriffen wird.To provision a service with credentials in code, create an instance of the ServiceHost class and specify the appropriate credential using the ServiceCredentials class, accessed through the Credentials property.

Festlegen eines ZertifikatsSetting a Certificate

Um einen Dienst mit einem X.509-Zertifikat auszustatten, das zur Authentifizierung des Dienstes für Clients genutzt wird, verwenden Sie die SetCertificate-Methode der X509CertificateRecipientServiceCredential-Klasse.To provision a service with an X.509 certificate to be used to authenticate the service to clients, use the SetCertificate method of the X509CertificateRecipientServiceCredential class.

Um einen Dienst mit einem Clientzertifikat bereitzustellen, verwenden Sie die SetCertificate-Methode der X509CertificateInitiatorServiceCredential-Klasse.To provision a service with a client certificate, use the SetCertificate method of the X509CertificateInitiatorServiceCredential class.

Festlegen der Windows-AnmeldeinformationenSetting Windows Credentials

Wenn der Client einen gültigen Benutzernamen und ein Kennwort angibt, werden diese Anmeldeinformationen zum Authentifizieren des Clients verwendet.If the client specifies a valid user name and password, that credential is used to authenticate the client. Andernfalls werden die Anmeldeinformationen des momentan angemeldeten Benutzers verwendet.Otherwise, the current logged-on user's credentials are used.

Festlegen von ClientanmeldeinformationenSetting Client Credentials

In WCF verwenden Clientanwendungen einen WCF-Client mit den Diensten herstellen.In WCF, client applications use a WCF client to connect to services. Jeder Client ist von der ClientBase<TChannel>-Klasse abgeleitet, und die ClientCredentials-Eigenschaft auf dem Client ermöglicht die Angabe verschiedener Werte für Clientanmeldeinformationen.Every client derives from the ClientBase<TChannel> class, and the ClientCredentials property on the client allows the specification of various values of client credentials.

Festlegen eines ZertifikatsSetting a Certificate

Um einen Dienst mit einem X.509-Zertifikat auszustatten, das zum Authentifizieren des Clients für einen Dienst genutzt wird, verwenden Sie die SetCertificate-Methode der X509CertificateInitiatorClientCredential-Klasse.To provision a service with an X.509 certificate that is used to authenticate the client to a service, use the SetCertificate method of the X509CertificateInitiatorClientCredential class.

Verwenden von Clientanmeldeinformationen zum Authentifizieren eines Clients für einen DienstHow Client Credentials Are Used to Authenticate a Client to the Service

Sie stellen Clientanmeldeinformationen, die für die Kommunikation mit einem Dienst erforderlich sind, bereit, indem Sie entweder die ClientCredentials-Eigenschaft oder die Credentials-Eigenschaft verwenden.Client credential information required to communicate with a service is provided using either the ClientCredentials property or the Credentials property. Der Sicherheitskanal verwendet diese Informationen, um den Client für den Dienst zu authentifizieren.The security channel uses this information to authenticate the client to the service. Die Authentifizierung erfolgt in einem von zwei Modi:Authentication is accomplished through one of two modes:

  • Die Clientanmeldeinformationen werden einmal verwendet werden, bevor die erste Nachricht gesendet wird, mithilfe der WCF-Client-Instanz auf einen Sicherheitskontext herzustellen.The client credentials are used once before the first message is sent, using the WCF client instance to establish a security context. Alle Anwendungsnachrichten werden dann über den Sicherheitskontext geschützt.All application messages are then secured through the security context.

  • Die Clientanmeldeinformationen werden verwendet, um alle Anwendungsnachrichten zu authentifizieren, die an den Dienst gesendet werden.The client credentials are used to authenticate every application message sent to the service. In diesem Fall wird zwischen dem Client und dem Dienst kein Kontext eingerichtet.In this case, no context is established between the client and the service.

Eingerichtete Identitäten können nicht geändert werdenEstablished Identities Cannot Be Changed

Wenn die erste Methode verwendet wird, wird der eingerichtete Kontext dauerhaft der Clientidentität zugeordnet.When the first method is used, the established context is permanently associated with the client identity. Dies bedeutet, dass die dem Client zugeordnete Identität nicht geändert werden kann, nachdem der Sicherheitskontext eingerichtet wurde.That is, once the security context has been established, the identity associated with the client cannot be changed.

Wichtig

Wenn die Identität nicht gewechselt werden kann (also wenn das Einrichten eines Sicherheitskontexts aktiviert ist (Standardeinstellung)), kann ein bestimmtes Verhalten auftreten.There is a situation to be aware of when the identity cannot be switched (that is, when establish security context is on, the default behavior). Wenn Sie einen Dienst, mit der kommuniziert mit einem anderen Dienst erstellen, kann die Identität, mit den WCF-Client mit dem zweiten Dienst Öffnen geändert werden.If you create a service that communicates with a second service, the identity used to open the WCF client to the second service cannot be changed. Dies wird zu einem Problem, wenn mehrere Clients den ersten Dienst verwenden dürfen und der Dienst die Identität der Clients annimmt, wenn er auf den anderen Dienst zugreift.This becomes a problem if multiple clients are allowed to use the first service and the service impersonates the clients when accessing the second service. Wenn der Dienst denselben Client für alle Aufrufer wiederverwendet, erfolgen alle Aufrufe des anderen Dienstes unter der Identität des ersten Aufrufers, der zum Öffnen des Clients für den anderen Dienst verwendet wurde.If the service reuses the same client for all callers, all calls to the second service are done under the identity of the first caller that was used to open the client to the second service. Anders ausgedrückt: Der Dienst verwendet die Identität des ersten Clients für alle Clients, um mit dem anderen Dienst zu kommunizieren.In other words, the service uses the identity of the first client for all its clients to communicate with the second service. Dies kann zur Erweiterung von Berechtigungen führen.This can lead to the elevation of privilege. Wenn dies nicht das für den Dienst erwünschte Verhalten darstellt, müssen Sie jeden Aufrufer verfolgen und für jeden Aufrufer einen neuen Client für den anderen Dienst erstellen. Außerdem müssen Sie sicherstellen, dass der Dienst nur den richtigen Client für den jeweiligen Aufrufer verwendet, um mit dem zweiten Dienst zu kommunizieren.If this is not the desired behavior of your service, you must track each caller and create a new client to the second service for every distinct caller, and ensure that the service uses only the right client for the right caller to communicate with the second service.

Weitere Informationen zu Anmeldeinformationen und sichere Sitzungen, finden Sie unter Sicherheitsüberlegungen für Sicherheitssitzungen.For more information about credentials and secure sessions, see Security Considerations for Secure Sessions.

Siehe auchSee Also

System.ServiceModel.ClientBase<TChannel>
ClientBase<TChannel>.ClientCredentials
ClientCredentials.ClientCertificate
BasicHttpMessageSecurity.ClientCredentialType
HttpTransportSecurity.ClientCredentialType
MessageSecurityOverHttp.ClientCredentialType
MessageSecurityOverMsmq.ClientCredentialType
MessageSecurityOverTcp.ClientCredentialType
TcpTransportSecurity.ClientCredentialType
X509CertificateInitiatorClientCredential.SetCertificate
X509CertificateInitiatorClientCredential.SetCertificate
X509CertificateInitiatorServiceCredential.SetCertificate
Begriffe der SicherheitSecurity Concepts
Sichern von Diensten und ClientsSecuring Services and Clients
Programmieren der WCF-SicherheitProgramming WCF Security
HTTP-TransportsicherheitHTTP Transport Security