Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Sprachspalte für ASP .NET-Unterstützung

Problembehandlung bei der Formularauthentifizierung

Willkommen in der Spalte ASP.NET Support Voice! Mein Name ist Jerry Orman. Ich bin seit über 5 Jahren bei Microsoft und habe mich die meiste Zeit auf webbezogene Technologien wie Microsoft FrontPage und die neuen Microsoft SharePoint-Technologien konzentriert. Ich habe das letzte Jahr mit Microsoft ASP.NET als Supporttechniker gearbeitet. In diesem Monat werde ich in der Spalte Support Voice erläutern, wie Sie Probleme mit der Formularauthentifizierung in Microsoft ASP.NET beheben.

Problembehandlung bei der Formularauthentifizierung

Wenn Sie die Formularauthentifizierung in einer ASP.NET-Anwendung verwenden, ist es möglicherweise erforderlich, ein Problem zu beheben, das auftritt, wenn der Benutzer zufällig zur Anmeldeseite umgeleitet wird. In einer idealen Welt würde dieses Problem so auftreten, dass Sie problemlos einen Debugger anfügen und das Problem erfassen können. In Produktionsumgebungen ist dies jedoch selten der Fall. Um ein zufälliges Problem wie dieses problem zu beheben, müssen Sie Informationen im Zusammenhang mit dem Problem protokollieren, damit Sie die Grundursache eingrenzen können.

In dieser Spalte wird kurz das Konzept der Formularauthentifizierung behandelt. Anschließend untersuchen wir, welche Szenarien dazu führen, dass ein Benutzer zur Anmeldeseite umgeleitet wird und wie Daten erfasst werden, die für die Isolierung des Problems relevant sind. Außerdem erfahren Sie, wie Sie eine IHttpModule-Schnittstelle zum Protokollieren der Formularauthentifizierungsinformationen implementieren.

Übersicht über die Formularauthentifizierung

Wenn sich ein Benutzer mithilfe der Formularauthentifizierung bei einer Website authentifiziert, erstellt der Server ein Cookie. Der Wert des Cookies ist ein verschlüsseltes Formularauthentifizierungsticket. Das Cookie wird bei jeder Anforderung an die Anwendung an den Server übergeben, und die FormsAuthenticationModule-Klasse entschlüsselt den Cookiewert und bestimmt, ob der Benutzer gültig ist oder nicht.

Standardmäßig wird die FormsAuthenticationModule-Klasse in der Machine.config-Datei hinzugefügt. Die FormsAuthenticationModule-Klasse verwaltet den FormsAuthentication-Prozess.

Es folgt ein Eintrag aus der Machine.config-Datei:

<httpModule>
     …other modules…
     <add name="FormsAuthentication"
         type="System.Web.Security.FormsAuthenticationModule" />
     …other modules…
</httpModule>

Der allgemeine HTTP-Datenverkehr für die Authentifizierung mithilfe der Formularauthentifizierung sieht in etwa wie folgt aus:

  1. Der Client sendet ein HTTP GET an Default.aspx. Es wird kein Formularauthentifizierungscooky gesendet.

  2. Der Server sendet eine 302-Antwort (Umleitung) an Login.aspx.

  3. Der Client sendet eine HTTP POST-Nachricht an Login.aspx. Sie enthält die Anmeldeinformationen.

  4. Der Server sendet eine 302-Antwort (Umleitung) an Default.aspx. Das Formularauthentifizierungscooky ist enthalten.

  5. Der Client sendet ein HTTP GET an Default.aspx. Dies schließt das Formularauthentifizierungscookies ein.

Weitere Informationen zum Implementieren und Verwenden der Formularauthentifizierung finden Sie auf den folgenden MSDN-Websites:

http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspxWeitere Informationen zum Freigeben von Formularauthentifizierungscookies finden Sie auf der folgenden ASP.NET Website:

http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx

Gründe dafür, dass ein Benutzer auf die Anmeldeseite umgeleitet wird

Das Formularauthentifizierungscookies geht verloren

Szenario 1


In diesem Szenario meldet sich ein Benutzer bei der Website an. Irgendwann sendet der Client eine Anforderung an den Server, und der
Die FormsAuthenticationModule-Klasse empfängt das Cookie nicht. Sie können feststellen, ob eine Benutzeranforderung das Cookie nicht enthält, indem Sie die Cookieprotokollierung in Microsoft-Internetinformationsdienste (IIS) aktivieren. Gehen Sie hierzu folgendermaßen vor:

  1. Öffnen Sie die IIS Microsoft Management Console (MMC).

  2. Klicken Sie mit der rechten Maustaste auf die Website, und klicken Sie dann auf
    Eigenschaften.

  3. Klicken Sie auf die Registerkarte Website und dann auf Protokollierung aktivieren.

  4. Stellen Sie sicher, dass das Protokollformat das erweiterte W3C-Protokolldateiformat ist.

  5. Klicken Sie auf Eigenschaften.

  6. Klicken Sie auf die Registerkarte Erweitert und dann auf
    Erweiterte Eigenschaften.

  7. Aktivieren Sie unter Erweiterte Eigenschaften das Kontrollkästchen Cookie(cs(Cookie)) und das Kontrollkästchen Referer (cs(Referer)).

Nachdem dieses Problem aufgetreten ist, bestimmen Sie, welcher Client das Problem und die IP-Adresse dieses Clients hatte. Filtern Sie das IIS-Protokoll nach der IP-Adresse dieses Clients, und zeigen Sie die <Cookie> Spalte an.

Hinweis Sie können den Protokollparser verwenden, um die IIS-Protokolle zu analysieren. Um Log Parser herunterzuladen, besuchen Sie die folgende Microsoft-Website:

http://www.microsoft.com/download/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07 Nachdem Sie die Liste der Anforderungen von diesem bestimmten Benutzer erhalten haben, suchen Sie nach den Anforderungen an die Anmeldeseite. Sie wissen, dass sie auf diese Seite umgeleitet wurden, und Sie möchten die Anforderungen sehen, bevor die Umleitung aufgetreten ist. Wenn ein Ähnliches wie folgt angezeigt wird, hat der Client das Cookie entweder nicht gesendet, oder das Cookie wurde im Netzwerk zwischen Client und Server entfernt.

Dies ist die erste Anmeldung.

Methode

Seite

Antwort

Cookies

ERHALTEN

/Default.aspx

302 (Umleitung)

Keine Cookies

ERHALTEN

/Login.aspx

200 (Erfolg)

Keine Cookies

BEREITSTELLEN

/Login.aspx

302 (Umleitung)

Keine Cookies

ERHALTEN

/Default.aspx

200 (Erfolg)

. ASPXAUTH

ERHALTEN

/SomePage.aspx

302 (Umleitung)

Nein. ASPXAUTH-Cookie

Dies sind andere Anforderungen, gefolgt von einer Anforderung an eine Seite auf der Website ohne . ASPXAUTH-Cookie.

Methode

Seite

Antwort

Cookies

ERHALTEN

/SomePage.aspx

302 (Umleitung)

Nein. ASPXAUTH-Cookie

ERHALTEN

/Login.aspx

200 (Erfolg)

Nein. ASPXAUTH-Cookie

BEREITSTELLEN

/Login.aspx

302 (Umleitung)

Nein. ASPXAUTH-Cookie

ERHALTEN

/SomePage.aspx

200 (Erfolg)

. ASPXAUTH


Hinweis Die erste Anforderung dieses Benutzers enthält wahrscheinlich kein Formularauthentifizierungscooky, es sei denn, Sie erstellen ein persistentes Cookie. Im IIS-Protokoll werden nur die Cookies angezeigt, die in der Anforderung empfangen wurden. Die erste Anforderung zum Erstellen des Formularauthentifizierungscookies erfolgt nach einem erfolgreichen Anmeldeversuch in der Anforderung.

Szenario 2


Das Formularauthentifizierungscooky kann auch verloren gehen, wenn das Cookielimit des Clients überschritten wird. In Microsoft Internet Explorer gilt ein Grenzwert von 20 Cookies. Nachdem das 20. Cookie auf dem Client erstellt wurde, werden vorherige Cookies aus der Sammlung des Clients entfernt. Gibt an, dass . Das ASPXAUTH-Cookie wird entfernt, der Benutzer wird auf die Anmeldeseite umgeleitet, wenn die nächste Anforderung verarbeitet wird.

Sie können die Problembehandlung für diese beiden Szenarien auf die gleiche Weise durchführen. Sehen Sie sich die Anforderung direkt vor der Umleitung zur Anmeldeseite an. Wenn die Anforderung an diese Seite Cookies generiert, ist dies etwas zu untersuchen.

Sie können Fiddler verwenden, um die HTTP-Header anzuzeigen, die an den Client gesendet werden. Nachdem Sie den Datenverkehr erfasst haben, doppelklicken Sie auf eine Anforderung, und klicken Sie dann auf Header, um die Set-Cookie Kopfzeile anzuzeigen. Wenn Sie eine erfolgreiche Anmeldung nachverfolgen, wird der Set-Cookie-Header in der Antwort einer erfolgreichen Anmeldung angezeigt.

Um Fiddler herunterzuladen, besuchen Sie die folgende Fiddler-Website:

http://www.fiddlertool.com/fiddler/

Szenario 3


Nachdem die Anforderung den Client verlassen hat, gibt es verschiedene Ebenen, die sich auf die gesendeten Pakete auswirken können. Um festzustellen, ob ein Netzwerkgerät das Cookie entfernt, müssen Sie eine Netzwerkablaufverfolgung auf dem Client und dem Server erfassen und dann im Text der Anforderung nach dem Cookie suchen. Sie möchten sich die Clientanforderung ansehen, um sicherzustellen, dass das Cookie gesendet wurde, und die Serverablaufverfolgung überprüfen, um sicherzustellen, dass der Server das Cookie empfangen hat.

Clientanforderung

Dies ist eine GET-Anforderung, nachdem der Benutzer authentifiziert wurde. Die Informationen zum Formularauthentifizierungsticket sind blau hervorgehoben. Dadurch wird bestätigt, dass die Cookieinformationen den Client verlassen haben. Wenn Sie ein Netzwerkerfassungstool wie Netmon verwenden, sehen Sie den Datenverkehr, der tatsächlich über den Adapter gegangen ist.

47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local
68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61   gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63   spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c   cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53   che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30   PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36   C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46   9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35   51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46   81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34   24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39   B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46   9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43   BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46   2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65   4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62   =VisitorId=b24eb

Serverseitige Anforderung

Wenn Sie sich die Anforderung ansehen, die den Server erreicht hat, möchten Sie sicherstellen, dass der Server die gleichen Informationen empfangen hat, die der Client gesendet hat. Wenn der Server nicht die gleichen Informationen erhalten hat, müssen Sie andere Geräte im Netzwerk untersuchen, um zu ermitteln, wo das Cookie entfernt wurde.

Hinweis Es gab auch Instanzen von ISAPI-Filtern, die Cookies entfernt haben. Wenn Sie bestätigen, dass der Webserver das Cookie empfangen hat, das Cookie aber nicht in den IIS-Protokollen aufgeführt ist, überprüfen Sie die ISAPI-Filter. Möglicherweise müssen Sie die Filter entfernen, um festzustellen, ob das Problem behoben ist.

Zeitüberschreitung des Formularauthentifizierungstickets

Die andere häufige Ursache für die Umleitung eines Benutzers ist, wenn das Formularauthentifizierungsticket abgelaufen ist. Für das Formularauthentifizierungsticket kann auf zwei Arten ein Timeout auftreten. Das erste Szenario tritt auf, wenn Sie den absoluten Ablauf verwenden. Bei absolutem Ablauf läuft das Authentifizierungsticket ab, wenn die Ablaufzeit abläuft. Sie legen beispielsweise einen Ablauf von 20 Minuten fest, und ein Benutzer besucht die Website um 14:00 Uhr. Der Benutzer wird zur Anmeldeseite umgeleitet, wenn der Benutzer die Website nach 14:20 Uhr besucht.

Wenn Sie den gleitenden Ablauf verwenden, ist das Szenario etwas komplizierter. Das Cookie und das resultierende Ticket werden aktualisiert, wenn der Benutzer die Website besucht, nachdem die Ablaufzeit halb abgelaufen ist. Beispielsweise legen Sie einen Ablauf von 20 Minuten fest, indem Sie den gleitenden Ablauf verwenden. Ein Benutzer besucht die Website um 14:00 Uhr, und der Benutzer erhält ein Cookie, das um 14:20 Uhr abläuft. Der Ablauf wird nur aktualisiert, wenn der Benutzer die Website nach 14:10 Uhr besucht. Wenn der Benutzer die Website um 14:09 Uhr besucht, wird das Ticket nicht aktualisiert, da die Hälfte der Ablaufzeit noch nicht abgelaufen ist. Wenn der Benutzer dann 12 Minuten wartet und die Website um 14:21 Uhr besucht, ist das Ticket abgelaufen. Der Benutzer wird zur Anmeldeseite umgeleitet.

Eine Möglichkeit, diese Art von Problem zu beheben, besteht darin, das Formularauthentifizierungscookie und die Ticketinformationen zu protokollieren. Auf diese Weise können Sie sehen, ob das Cookie von IIS empfangen wurde und welche Werte es sind. Dazu können Sie ein HttpModule-Modul schreiben und dieses Modul dann in die Anforderungspipeline einbinden. Sie müssen den Code Ihrer Anwendung nicht ändern, um die benötigten Informationen zu erhalten.

Das angefügte Beispiel funktioniert im Microsoft .NET Framework 1.1 und im .NET Framework 2.0 und enthält kommentare. Das Beispiel enthält die folgenden Dateien:

  • FormsAuthEvents.cs: Die Klasse, die IHttpModule implementiert und an das Application_BeginRequest-Ereignis anbindet.

  • FormsAuthInfo.cs: Die Klasse, die das Cookie abruft und das Formularauthentifizierungsticket entschlüsselt. Außerdem wird die Web.config-Datei der Anwendung überprüft, um sicherzustellen, dass die Formularauthentifizierung aktiviert ist.

  • FormsAuthConfig.cs: Die Klasse, die Informationen aus der FormsAuthLogger.config-Datei liest.

  • Log.cs: Die Datei, die einen Stringbuilder akzeptiert und die Werte in eine Protokolldatei schreibt.

  • FormsAuthLogger.config: Die XML-Datei, die von der Datei Log.cs gelesen wird. Diese Datei muss sich im Ordner /bin mit der integrierten DLL befinden. Mit der Datei können Sie Folgendes konfigurieren:

    • Nach IP filtern: Sie können die Erfassung von Daten nach Client-IP filtern. Auf diese Weise können Sie nur Anforderungen von einem Client protokollieren, von dem bekannt ist, dass er das Problem reproduziert. Dadurch wird die Größe des Protokolls reduziert.

    • Erfassungstyp: Gibt an, wo die Datei gespeichert werden soll. Die Standardeinstellung ist der Ordner Temporäre ASP.NET Dateien. Sie können diesen jedoch überall speichern, solange das Workerprozesskonto in den Ordner schreiben kann.

Hinweis: Ich stelle einen Downloadlink für den code bereit, der in der FormsAuthLogger.zip-Datei angegeben ist.

Ich möchte hier auf die Standard Bereiche hinweisen:

  1. Erstellen Sie eine Klasse, die die IHttpModule-Schnittstelle implementiert.

    public class FormsAuthEvents : IHttpModule 
    {
    …code…
    }
  2. Verknüpfen Sie das Ereignis, das Sie sich ansehen möchten. In diesem Beispiel verwenden wir das Application_BeginRequest-Ereignis. Auf diese Weise können wir jede Anforderung untersuchen und ermitteln, ob sie das Formularauthentifizierungscookie enthält, und das FormsAuthenticationTicket protokollieren, wenn das Cookie vorhanden ist.

    public void Init(HttpApplication application) 
    {
    //Wire up the BeginRequest event
    application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. Implementieren Sie das Application_BeginRequest-Ereignis.

    private void Application_BeginRequest(Object source, EventArgs e)
    {
       …code to log the ticket…
    }
    
  4. Rufen Sie das Formularauthentifizierungscookies ab, und entschlüsseln Sie es dann.

  5. Protokollieren Sie die Werte. Ich würde empfehlen, zusätzlich zu den Formularinformationen Folgendes zu protokollieren. Dies hilft Ihnen, Ihre Formularauthentifizierungsinformationen bei Bedarf an den IIS-Protokollen zu richten:

    • Datum: Ermöglicht Es Ihnen zu sehen, wann die Anforderung einging.

    • RequestType: Zeigt an, ob es sich bei der Anforderung um eine Get- oder eine Post-Anforderung handelt.

    • URL: Zeigt das Muster der Anforderungen an, die zu dem Problem führen.

    • Referrer

    • ClientIP: Bindet die Anforderungen an einen bestimmten Client.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×