Problembehandlung bei der Formularauthentifizierung

Artikel-ID: 910439 - Produkte anzeigen, auf die sich dieser Artikel bezieht
ASP .NET Support Voice-Spalte

Problembehandlung bei der Formularauthentifizierung

diese Kolumne an Ihre Bedürfnisse anpassen wir möchten Sie Ihre Ideen zu den Themen zu senden, die Sie interessieren einladen möchten, und behandelt Probleme, die Sie anzeigen möchten, in zukünftigen Knowledge Base-Artikeln und Support Voice-Kolumnen. Sie können Ihre Ideen und ihr Feedback über das Formular Ask For It senden. Es gibt auch eine Verknüpfung zu dem Formular am unteren Rand dieser Spalte.
Alles erweitern | Alles schließen

Auf dieser Seite

Willkommen Sie bei ASP.NET Support Voice-Spalte! Mein Name ist Jerry Orman. Ich wurden mit Microsoft 5 Jahren und Großteil meiner Zeit Schwerpunkt webbezogene Technologien wie z. B. Microsoft FrontPage und die neuen Microsoft SharePoint-Technologien verbracht haben. Ich habe haben damit verbracht, das letzte Jahr mit Microsoft ASP.NET als einen Supportmitarbeiter arbeiten. In diesem Monat in der Support Voice-Spalte, ich werde Formularauthentifizierung in Microsoft ASP.NET Problembehandlung erläutert.

Problembehandlung bei der Formularauthentifizierung

Wenn Sie in einer ASP.NET-Anwendung die Formularauthentifizierung verwenden, vielleicht Sie es erforderlich, ein Problem beheben, das auftritt, wenn der Benutzer nach dem Zufallsprinzip auf die Anmeldeseite umgeleitet wird. In einer idealen Welt würden dieses Problem auftreten in einer Weise, die ermöglichen würden Sie einfach einen Debugger anhängen und erfassen das Problem. In Produktionsumgebungen, jedoch ist dies selten der Fall. Um ein zufälliges Problem wie dieser zu beheben, müssen Sie sich Informationen über das Problem, dass Sie die Ursache eingrenzen können.

In dieser Spalte wird kurz das Konzept Formularauthentifizierung behandelt. Anschließend werden wir in führen, welche Szenarien an einen Benutzer zur Anmeldeseite umgeleitet wird und wie Sie Daten sammeln, mit dem Eingrenzen des Problems relevant sind. Auch besprochen zum Implementieren einer IHttpModule-Schnittstelle für die Formularauthentifizierung Informationen protokollieren.

Formulare Authentifizierung (Übersicht)

Wenn ein Benutzer zu einer Website mithilfe von Formularauthentifizierung 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 FormsAuthenticationModule -Klasse des Werts für Cookies entschlüsselt und bestimmt, ob der Benutzer gültig ist.

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

Im folgenden ist ein Eintrag aus der Datei Machine.config: ? sonstige Modules?
<httpModule>
     ?other modules?
     <add name="FormsAuthentication"
         type="System.Web.Security.FormsAuthenticationModule" />
     ?other modules?
</httpModule>
der allgemeine HTTP-Verkehr für die Authentifizierung mithilfe von Formularauthentifizierung ähnelt der folgenden:
  1. Der Client sendet eine HTTP GET zu default.aspx. Keine Formularauthentifizierungscookie wird gesendet.
  2. Der Server sendet eine Antwort 302 (Redirect) auf Login.aspx.
  3. Der Client sendet eine HTTP-POST an Login.aspx. Es enthält die Login-Informationen.
  4. Der Server sendet eine Antwort 302 (Redirect) auf default.aspx. Das Formularauthentifizierungscookie ist enthalten.
  5. Der Client sendet eine HTTP GET zu default.aspx. Dies umfasst das Formularauthentifizierungscookie.
Informationen über das Implementieren und Formularauthentifizierung verwenden finden Sie auf 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).aspx
Weitere Informationen zum Freigeben von Formularauthentifizierungscookies die folgenden ASP.NET-Website:
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx

Gründe, dass ein Benutzer zu der Anmeldeseite umgeleitet werden kann

Das Formularauthentifizierungscookie geht verloren

1. Szenario

In diesem Szenario meldet ein Benutzer auf die Website. Irgendwann der Client sendet eine Anforderung an den Server, und die FormsAuthenticationModule -Klasse erhält keinen das Cookie. Sie können bestimmen Wenn Anforderung ein Benutzer durch Aktivieren von Cookies, die Protokollierung in Microsoft Internet Information Services (IIS) nicht das Cookie enthalten. Gehen Sie dazu 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 klicken Sie dann auf Protokollierung aktivieren .
  4. Stellen Sie sicher, dass das Protokollformat W3C Extended Log File Format ist.
  5. Klicken Sie auf Eigenschaften .
  6. Klicken Sie auf die Registerkarte Erweitert , und klicken Sie dann auf Erweiterte Eigenschaften .
  7. Erweiterte Eigenschaften , aktivieren Sie unter das Kontrollkästchen Cookie(cs(Cookie)) und Referenz (cs(Referer)) das Kontrollkästchen.
Nachdem dieses Problem auftritt, ermitteln Sie, welcher Client das Problem und die Clientadresse hatte. Filter-IP-Adresse des Clients und Anzeigen der IIS-Anmeldung die < Cookies > Spalte.

Hinweis: Log Parser können Sie um die IIS-Protokolle zu analysieren. Log Parser downloaden, die folgenden Microsoft-Website:
http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07
Nachdem Sie die Liste der Anforderungen von, dass bestimmte Benutzer haben, suchen Sie nach den Anforderungen an die Anmeldeseite. Sie wissen, dass Sie diese Seite umgeleitet wurden und Sie die Anforderungen anzuzeigen, bevor die Umleitung aufgetreten möchten. Wenn Sie etwas sehen ähnlich dem folgenden des Clients entweder keinen geschickt das Cookie oder das Cookie wurde im Netzwerk zwischen Client und Server entfernt.

Dies ist die erste Anmeldung.
Tabelle minimierenTabelle vergrößern
Methode Seite Antwort Cookies
ABRUFEN/Default.aspx302 (Redirect)Keine Cookies
ABRUFEN/Login.aspx200 (Erfolg)Keine Cookies
POST/Login.aspx302 (Redirect)Keine Cookies
ABRUFEN/Default.aspx200 (Erfolg).ASPXAUTH
ABRUFEN/SomePage.aspx302 (Redirect)Kein Cookie .ASPXAUTH
Dies sind andere Anforderungen, gefolgt von einer Anforderung auf eine Seite auf der Website ohne das Cookie ASPXAUTH.
Tabelle minimierenTabelle vergrößern
Methode Seite Antwort Cookies
ABRUFEN/SomePage.aspx302 (Redirect)Kein Cookie .ASPXAUTH
ABRUFEN/Login.aspx200 (Erfolg)Kein Cookie .ASPXAUTH
POST/Login.aspx302 (Redirect)Kein Cookie .ASPXAUTH
ABRUFEN/SomePage.aspx200 (Erfolg).ASPXAUTH

Hinweis: Die erste Anforderung von Benutzer ist nicht wahrscheinlich ein Formularauthentifizierungscookie haben, wenn Sie ein persistentes Cookie erstellen. IIS-Protokoll werden Sie nur die Cookies angezeigt, die in der Anforderung empfangen wurden. Die erste Anforderung, das Formularauthentifizierungscookie wird bei der Anforderung nach einer erfolgreichen Anmeldung sein.
Szenario 2

Das Formularauthentifizierungscookie kann außerdem verloren, wenn der Client Cookies Grenzwert überschritten wird. In Microsoft Internet Explorer besteht eine Beschränkung von 20 Cookies. Nachdem das 20th Cookie auf dem Client erstellt wurde, werden vorherige Cookies aus des Clients Auflistung entfernt. Wenn das Cookie ASPXAUTH entfernt wird, wird der Benutzer bei der nächste Anforderung verarbeitet wird an die Anmeldeseite umgeleitet.

Sie können diese beiden Szenarien auf die gleiche Weise behandeln. Betrachten Sie die Anforderung vor der Umleitung zur Anmeldeseite. Wenn die Anforderung an diese Seite Cookies generiert, werden diese etwas zu untersuchen.

Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
306070Grenzwerte Anzahl und Größe eines Cookies in Internet Explorer

Fiddler können Sie die HTTP-Header anzeigen, die an den Client gesendet werden. Nach der Aufzeichnung des Datenverkehrs doppelklicken Sie auf eine Anforderung, und klicken Sie auf Kopfzeilen den Set-Cookie-Header an. Wenn Sie eine erfolgreiche Anmeldung verfolgen, sehen Sie den Set-Cookie-Header in der Antwort eine erfolgreiche Anmeldung.

Um Fiddler zu downloaden, die folgenden Fiddler-Website:
http://www.fiddlertool.com/fiddler/
Szenario 3

Nachdem die Anforderung des Clients verlässt, gibt es verschiedene Ebenen, die die Pakete auswirken können, die gesendet werden. Um festzustellen, wenn ein Netzwerkgerät, das Cookie entfernt wird, müssen Sie eine Netzwerkablaufverfolgung auf dem Client und dem Server erfasst, und suchen im Hauptteil der Anforderung für das Cookie. Betrachten Sie die Clientanforderung, um sicherzustellen, dass das Cookie gesendet wurde, und Überprüfen der Serverablaufverfolgung um sicherzustellen, dass der Server das Cookie empfangen möchten.

Clientanforderung

Eine GET-Anforderung ist nach Authentifizierung des Benutzers Die Authentifizierungsinformationen Ticket Formulare wird in Blau hervorgehoben. Dadurch wird bestätigt, dass die Cookieinformationen den Client verlassen. When you use a network capture tool, like Netmon, you see the traffic that actually went through the adapter.
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
Server-side request

Wenn Sie die Anforderung, die den Server erreicht betrachten, sollten Sie sicherstellen, dass der Server die gleiche Informationen empfangen, die der Client gesendet. Wenn der Server die gleiche Informationen nicht erhalten haben, müssen Sie Untersuchen von anderen Geräten im Netzwerk bestimmen, in dem das Cookie entfernt wurde.

Hinweis: Es wurden auch Instanzen von ISAPI-Filter entfernen von Cookies. Wenn Sie bestätigen, dass der Server das Cookie empfangen, aber das Cookie nicht in die IIS-Protokolle aufgeführt ist, überprüfen Sie die ISAPI-Filter. Sie müssen möglicherweise zu entfernenden Filter, um festzustellen, ob das Problem behoben ist.

Timeout für das Formularauthentifizierungsticket

Die andere häufige Ursache für einen Benutzer umgeleitet werden ist, wenn das Formularauthentifizierungsticket abgelaufen ist. Das Formularauthentifizierungsticket können Timeout gibt es zwei Möglichkeiten. Das erste Szenario tritt auf, wenn Sie absolute Ablaufzeit verwenden. Mit absoluten Ablaufzeit läuft das Authentifizierungsticket ab, wenn die Gültigkeitsdauer abläuft. Z. B. ein Ablaufdatum von 20 Minuten festlegen und ein Benutzer besucht die Website, um 2: 00 Uhr. Wenn der Benutzer die Site nach 14: 20 besucht der Benutzer zur Anmeldeseite umgeleitet.

Wenn Sie die gleitende Ablaufzeit verwenden, ist das Szenario ein wenig komplizierter. Das Cookie und der resultierende Ticket werden aktualisiert, wenn der Benutzer die Website, besucht nachdem die Ablaufzeit Hälfte abgelaufen ist. Beispielsweise legen Sie ein Ablaufdatum von 20 Minuten mithilfe gleitende Ablaufzeit. Ein Benutzer besucht die Website, um 2: 00 Uhr, und der Benutzer erhält ein Cookie, das um 2: 20 Uhr ablaufen. Das Ablaufdatum wird nur aktualisiert, wenn der Benutzer die Site nach 14: 10 besucht. Wenn der Benutzer die Website um 2: 09 Uhr besucht, wird das Ticket nicht aktualisiert, da Hälfte der Ablaufzeitpunkt nicht bestanden hat. Wenn der Benutzer dann 12 Minuten der Website um 2: 21 Uhr wartet, wird das Ticket abgelaufen sein. Der Benutzer wird zur Anmeldeseite umgeleitet.

Eine Möglichkeit, Ansatz ist diese Art des Problems die Formulare Authentifizierung Cookie und Ticket-Informationen protokollieren. Auf diese Weise sehen Sie, wenn das Cookie empfangen wurde, von IIS und was die Werte sind. Hierzu können Sie ein HttpModule schreiben und dann das Modul in die Anforderungspipeline anschließen. Sie müssen nicht ändern Sie die Anwendung Code um benötigten Informationen zu erhalten.

Das angefügte Beispiel funktioniert in Microsoft .NET Framework 1.1 und .NET Framework 2.0 und verfügt über Kommentare in der gesamten. Das Beispiel enthält die folgenden Dateien:
  • FormsAuthEvents.cs: Die Klasse, die IHttpModule implementiert und in das Ereignis Application_BeginRequest bindet.
  • FormsAuthInfo.cs: Die Klasse, die das Cookie abgerufen und entschlüsselt das Formularauthentifizierungsticket. Außerdem überprüft Sie die Datei Web.config der Anwendung um sicherzustellen, die Formularauthentifizierung aktiviert ist.
  • FormsAuthConfig.cs: Die Klasse, die Informationen aus der FormsAuthLogger.config-Datei liest.
  • Log.cs: Die Datei, die akzeptiert einen Stringbuilder und schreibt die Werte in einer Protokolldatei.
  • FormsAuthLogger.config: Die XML-Datei, die gelesen wird durch die Datei Log.cs. Diese Datei hat in den/bin-Ordner mit der DLL erstellt werden. Die Datei können Sie die folgenden Einstellungen konfigurieren:
    • Nach IP-Filtern: Sie können die Aufzeichnung der Daten vom Client-IP-Filtern. Auf diese Weise können Sie nur Anforderungen von einem Client anmelden, die zum Reproduzieren des Problems bekannt ist. Dies verringert die Größe des Protokolls.
    • Capture-Typ: dies an, wo die Datei zu speichern. Der Standardwert ist der Ordner Temporary ASP.NET Files, jedoch können speichern diese überall, solange die Arbeitsprozesskonto die Möglichkeit, den Ordner geschrieben hat.
Hinweis: Ich gebe einen Downloadlink für den Code in die Datei FormsAuthLogger.zip bereitgestellt.

Die Hauptbereiche hier werde hinweisen werden:
  1. Erstellen Sie eine Klasse, die implementiert die IHttpModule -Schnittstelle.
    public class FormsAuthEvents : IHttpModule 
    {
    		?code?
    }
  2. Verbinden Sie das Ereignis Sie ansehen möchten. In diesem Beispiel verwenden wir das Application_BeginRequest -Ereignis. Auf diese Weise jeder untersuchen können anfordern, die bestimmen, ob es das Formularauthentifizierungscookie verfügt und FormsAuthenticationTicket protokollieren, wenn das Cookie vorhanden.
    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. Das Formularauthentifizierungscookie abrufen und dann zu entschlüsseln.
  5. Melden Sie sich die Werte an. Es empfiehlt sich die folgenden hinaus Formulare Informationen protokollieren. Dadurch können Sie Ihre Authentifizierungsinformationen Formulare auf die IIS-Protokolle richten Sie bei Bedarf:
    • Datum: Ermöglicht Ihnen, angezeigt, wenn die Anforderung stammt.
    • RequestType: Zeigt an, ob die Anforderung einer Get oder eine POST ist.
    • URL: Zeigt das Muster der Anforderungen, die zu dem Problem.
    • Referenz
    • ClientIP: Verbindet in Anforderungen an einen bestimmten Client.
Weitere Informationen zu Formularauthentifizierung können Sie die folgenden FormsAuthLogger-Beispiel-Dateien herunterladen:
Bild minimierenBild vergrößern
Download
Download the FormsAuthLogger.exe package now.

Sie gerne wie immer Ideen auf Themen, die Spalten in Zukunft behandelt werden soll oder in der Knowledge Base mithilfe des Formulars Ask For It zu senden.

Eigenschaften

Artikel-ID: 910439 - Geändert am: Donnerstag, 31. Mai 2007 - Version: 1.5
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 2.0
Keywords: 
kbmt kbtshoot kbiis kbcode kbasp KB910439 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 910439
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns