Freigeben über


Gewusst wie: Anpassen der Benutzeranmeldung bei Verwendung des WCF-Authentifizierungsdiensts

Aktualisiert: November 2007

In diesem Thema wird gezeigt, wie benutzerdefinierte Anmeldeinformationen überprüft werden, um Benutzer zu authentifizieren, wenn Sie den ASP.NET-Authentifizierungsdienst unter Verwendung von Windows Communication Foundation (WCF) aufrufen. In der Regel erfordert die Authentifizierung nur einen Benutzernamen und ein Kennwort. In einigen Fällen müssen Sie jedoch möglicherweise die Identität eines Benutzers überprüfen, indem Sie zusätzliche Anmeldeinformationen verwenden, wie zum Beispiel eine Identifikationsnummer.

Sie verwenden die WCF-Implementierung für Authentifizierungsdienste, wenn Sie einen Benutzer von einer Clientanwendung aus anmelden möchten, die SOAP 1.1-Nachrichten senden und empfangen kann, wie z. B. eine Java-Anwendung.

So überprüfen Sie benutzerdefinierte Anmeldeinformationen für die Authentifizierung

  1. Erstellen Sie in der Datei Global.asax der Webanwendung einen Ereignishandler für das Authenticating-Ereignis.

  2. Lesen Sie im Handler den Inhalt der CustomCredential-Eigenschaft des Handlerparameters AuthenticatingEventArgs aus, und authentifizieren Sie dann die Werte.

    Das folgende Beispiel zeigt, wie aus der CustomCredential-Eigenschaft zwei Authentifizierungswerte gelesen und an eine benutzerdefinierte Authentifizierungsklasse mit dem Namen StudentAuthentication übergeben werden.

    Sub AuthenticationService_Authenticating _
       (ByVal sender As Object, _
        ByVal e As System.Web.ApplicationServices.AuthenticatingEventArgs)
        Dim studentid As String = String.Empty
        Dim answer As String = String.Empty
    
        Dim credentials As String() = _
             e.CustomCredential.Split(New Char() {","c})
        If (credentials.Length > 0) Then
            studentid = credentials(0)
            If (credentials.Length > 1) Then
                answer = credentials(1)
            End If
        End If
    
        Try
            e.Authenticated = _
                StudentAuthentication.ValidateStudentCredentials _
                (e.Username, e.Password, studentid, answer)
        Catch ex As ArgumentNullException
            e.Authenticated = False
        End Try
    
    
        e.AuthenticationIsComplete = True
    End Sub
    
    void AuthenticationService_Authenticating(object sender, System.Web.ApplicationServices.AuthenticatingEventArgs e)
    {
        string studentid = String.Empty;
        string answer = String.Empty;
    
        string[] credentials =
            e.CustomCredential.Split(new char[] { ',' });
        if (credentials.Length > 0)
        {
            studentid = credentials[0];
            if (credentials.Length > 1)
            {
                answer = credentials[1];
            }
        }
    
        try
        {
            e.Authenticated =
                StudentAuthentication.ValidateStudentCredentials
                (e.UserName, e.Password, studentid, answer);
        }
        catch (ArgumentNullException ex)
        {
            e.Authenticated = false;
        }
    
        e.AuthenticationIsComplete = true;
    }
    
  3. Binden Sie in der Application_Start-Methode der Datei Global.asax den Ereignishandler für das Authenticating-Ereignis ein.

    Das folgende Beispiel veranschaulicht die Bindung eines Handlers an das Authenticating-Ereignis.

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        AddHandler System.Web.ApplicationServices.AuthenticationService.Authenticating, _
          AddressOf Me.AuthenticationService_Authenticating
    End Sub
    
    void Application_Start(object sender, EventArgs e) 
    {
        System.Web.ApplicationServices.AuthenticationService.Authenticating += 
            new EventHandler<System.Web.ApplicationServices.AuthenticatingEventArgs>(AuthenticationService_Authenticating);
    
    }
    
  4. Rufen Sie den Authentifizierungsdienst einer Anwendung auf, die eine SOAP-Nachricht von einem Webdienst verarbeiten kann, und übergeben Sie die zusätzlichen Werte zur Authentifizierung in der CustomCredential-Eigenschaft.

Kompilieren des Codes

Robuste Programmierung

Die vorherigen Codebeispiele zeigen eine benutzerdefinierte Authentifizierungsklasse, die die ArgumentNullException auslöst, wenn einer der Parameter den Wert null hat. Der Code muss alle Ausnahmen, die während der Überprüfung ausgelöst werden, verarbeiten.

Sicherheit

Greifen Sie immer unter Verwendung von SSL (Secure Sockets Layer) und HTTPS auf den Authentifizierungsdienst zu.

Siehe auch

Konzepte

Übersicht über den Windows Communication Foundation-Authentifizierungsdienst

Referenz

AuthenticationService

AuthenticatingEventArgs