Vorgehensweise: Authentifizierung mit Benutzernamen und KennwortHow to: Authenticate with a User Name and Password

In diesem Thema wird veranschaulicht, wie Sie einem Dienst von Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) die Authentifizierung eines Clients mit einem Benutzernamen und einem Kennwort einer Windows-Domäne ermöglichen.This topic demonstrates how to enable a Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) service to authenticate a client with a Windows domain username and password. Es wird davon ausgegangen, dass Sie über einen funktionsfähigen selbst gehosteten WCF-Dienst verfügen.It assumes you have a working, self-hosted WCF service. Ein Beispiel zum Erstellen einer grundlegenden selbst gehosteten WCF-Dienst finden Sie unter Lernprogramm für erste Schritte.For an example of creating a basic self-hosted WCF service see, Getting Started Tutorial. In diesem Thema wird davon ausgegangen, dass der Dienst im Code konfiguriert ist.This topic assumes the service is configured in code. Wenn Sie möchten, finden ein Beispiel zum Konfigurieren eines ähnlichen Diensts mithilfe einer Konfigurationsdatei finden Sie unter Nachrichtensicherheit – BenutzernameIf you would like to see an example of configuring a similar service using a configuration file see Message Security User Name

So konfigurieren Sie einen Dienst, um seinen Clients verwenden Sie Benutzernamen und Kennwörter mithilfe von Windows-Domäne authentifizieren der < xref:System.ServiceModel.WsHttpBinding>, und legen seine Security.Mode Eigenschaft Message.To configure a service to authenticate its clients using Windows Domain username and passwords use the < xref:System.ServiceModel.WsHttpBinding> and set its Security.Mode property to Message. Darüber hinaus müssen Sie ein X.509-Zertifikat angeben, das zum Verschlüsseln des Benutzernamens und Kennworts verwendet wird, während diese vom Client an den Dienst gesendet werden.In addition you must specify an X509 certificate that will be used to encrypt the username and password as they are sent from the client to the service.

Auf dem Client muss der Benutzer zur Eingabe des Benutzernamens und Kennworts und zur Eingabe der Anmeldeinformationen für den WCF-Clientproxy aufgefordert werden.On the client, you must prompt the user for the username and password and specify the user’s credentials on the WCF client proxy.

So konfigurieren Sie einen WCF-Dienst für die Authentifizierung mit dem Benutzernamen und Kennwort einer Windows-DomäneTo configure a WCF service to authenticate using Windows domain username and password.

  1. Erstellen Sie eine Instanz von der < xref:System.ServiceModel.WsHttpBinding>, Festlegen des Sicherheitsmodus der Bindung, die SecurityMode.Messagelegen die ClientCredentialType Bindung mit MessageCredentialType.UserName, und fügen Sie einen Dienstendpunkt wie gezeigt, über die konfigurierte Bindung an den Diensthost Im folgenden Code:Create an instance of the < xref:System.ServiceModel.WsHttpBinding>, set the security mode of the binding to SecurityMode.Message, set the ClientCredentialType of the binding to MessageCredentialType.UserName, and add a service endpoint using the configured binding to the service host as shown in the following code:

    // ...  
    WSHttpBinding userNameBinding = new WSHttpBinding();  
    userNameBinding.Security.Mode = SecurityMode.Message;  
    userNameBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;  
    svcHost.AddServiceEndpoint(typeof(IService1), userNameBinding, "");  
    // ...  
    
  2. Geben Sie das Serverzertifikat an, das zum Verschlüsseln des über die Verbindung gesendeten Benutzernamens und Kennworts verwendet wird.Specify the server certificate used to encrypt the username and password information sent over the wire. Dieser Code sollte direkt auf den vorangehenden Code folgen.This code should immediately follow the code above. Im folgenden Beispiel wird das Zertifikat, das erstellt wird, indem Sie die Datei "Setup.bat" aus der Nachrichtensicherheit – Benutzername Beispiel:The following example uses the certificate that is created by the setup.bat file from the Message Security User Name sample:

    // ...  
    svcHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "localhost");  
    // ...  
    

    Sie können ein eigenes Zertifikat verwenden, indem Sie im Code auf das eigene Zertifikat verweisen.You can use your own certificate, just modify the code to refer to your certificate. Weitere Informationen zum Erstellen und Verwenden von Zertifikaten finden Sie unter arbeiten mit Zertifikaten.For more information about creating and using certificates see Working with Certificates. Stellen Sie sicher, dass sich das Zertifikat im Speicher für vertrauenswürdige Personen für den lokalen Computer befindet.Make sure the certificate is in the Trusted People certificate store for the Local Machine. Hierzu können Sie durch Ausführen von mmc.exe und Auswählen der Datei, Snap-In hinzufügen/entfernen... Menüelement.You can do this by running mmc.exe and selecting the File, Add/Remove Snap-in... menu item. In der hinzufügen oder Entfernen von Snap-Ins wählen Sie im Dialogfeld die Zertifikat-Snap-in , und klicken Sie auf hinzufügen.In the Add or Remove Snap-ins dialog, select the Certificates snap-in and click Add. Wählen Sie im Dialogfeld "Zertifikat-Snap-in" Computerkonto.In the Certificates Snap-in dialog select Computer account. Standardmäßig befindet sich das Zertifikat, das im Beispiel für Nachrichtensicherheit – Benutzername generiert wurde, im Ordner Persönlich – Zertifikate.By default the certificate generated from the Message Security User name sample will be located in the Personal/Certificates folder. Es wird als "Localhost", unter der Spalte im MMC-Fenster ausgestellt für angezeigt werden.It will be listed as "localhost" under the Issued to column in the MMC window. Ziehen Sie das Zertifikat in der vertrauenswürdige Personen Ordner.Drag and drop the certificate into the Trusted People folder. Dadurch kann WCF das Zertifikat beim Ausführen einer Authentifizierung als vertrauenswürdiges Zertifikat behandeln.This will allow WCF to treat the certificate as a trusted certificate when performing authentication.

So rufen Sie den Dienst auf, der den Benutzernamen und das Kennwort übergibtTo call the service passing username and password

  1. Die Clientanwendung muss den Benutzer zur Eingabe von Benutzername und Kennwort auffordern.The client application must prompt the user for their username and password. Der folgende Code fordert den Benutzer zur Eingabe von Benutzername und Kennwort auf.The following code asks the user for username and password.

    Warnung

    Dieser Code sollte nicht in Produktionssystemen verwendet werden, da das Kennwort bei der Eingabe sichtbar ist.This code should not be used in production as the password is displayed while being entered.

    public static void GetPassword(out string username, out string password)  
            {  
                Console.WriteLine("Provide a valid machine or domain account. [domain\\user]");  
                Console.WriteLine("   Enter username:");  
                username = Console.ReadLine();  
                Console.WriteLine("   Enter password:");  
                password = Console.ReadLine();             
                return;  
            }  
    
  2. Erstellen Sie eine Instanz des Clientproxys, indem Sie die Anmeldeinformationen des Clients wie im folgenden Code dargestellt angeben:Create an instance of the client proxy specifying the client’s credentials as shown in the following code:

    string username;  
    string password;  
    
    // Instantiate the proxy  
    Service1Client proxy = new Service1Client();  
    
    // Prompt the user for username & password  
    GetPassword(out username, out password);  
    
    // Set the user’s credentials on the proxy  
    proxy.ClientCredentials.UserName.UserName = username;  
    proxy.ClientCredentials.UserName.Password = password;  
    
    // Treat the test certificate as trusted  
    proxy.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust;  
    // Call the service operation using the proxy  
    

Siehe auchSee Also

< xref:System.ServiceModel.WsHttpBinding>< xref:System.ServiceModel.WsHttpBinding>
WSHttpSecurity
SecurityMode
UserName
Password
UserNamePasswordClientCredential
Mode
ClientCredentialType
Transportsicherheit mit StandardauthentifizierungTransport Security with Basic Authentication
Sicherheit bei verteilten AnwendungenDistributed Application Security
<WsHttpBinding ><wsHttpBinding>