Risoluzione dei problemi di autenticazione basata su form

Colonna ASP .NET il supporto vocale

Risoluzione dei problemi di autenticazione basata su form

Per personalizzare questa colonna in base alle esigenze, desideriamo invitati a inviare le proprie idee sugli argomenti che sono interessano e problemi che si desidera vedere soluzione nei futuri articoli della Knowledge Base e le colonne di Support Voice. È possibile inviare idee e commenti e suggerimenti tramite il modulo Ask For It . È inoltre disponibile un collegamento al modulo nella parte inferiore della colonna.
Benvenuti alla colonna di ASP.NET Support Voice. Il mio nome è Jerry Orman. Sono stato in Microsoft per oltre cinque anni e ho trascorso la maggior parte del mio tempo occupandomi in particolare di tecnologie Web come Microsoft FrontPage e le nuove tecnologie Microsoft SharePoint. Ho Ho trascorso l'ultimo anno con Microsoft ASP.NET come servizio di supporto tecnico. Questo mese nella colonna di Support Voice, andrò a spiegare come risolvere i problemi di autenticazione basata su form in Microsoft ASP.NET.

Risoluzione dei problemi di autenticazione basata su form

Quando si utilizza l'autenticazione basata su form in un'applicazione ASP.NET, potrebbe essere necessario risolvere un problema che si verifica quando l'utente in modo casuale viene reindirizzato alla pagina di accesso. In un mondo ideale, sarebbe presentarsi in modo che consentisse collegare un debugger e facilmente individuare il problema. Negli ambienti di produzione, tuttavia, ciò si verifica raramente. Per risolvere un problema casuale come questo, è necessario registrare le informazioni relative al problema in modo che è possibile restringere la causa principale.

In questo articolo, esamineremo brevemente il concetto di autenticazione basata su form. Verrà quindi esaminato in quali scenari di portare a un utente viene reindirizzato alla pagina di accesso e su come acquisire i dati rilevanti per isolare il problema. Inoltre, verrà illustrato come implementare un'interfaccia IHttpModule per registrare le informazioni di autenticazione basata su form.

Forms Authentication Overview

Quando un utente viene autenticato in un sito Web utilizzando l'autenticazione basata su form, il server crea un cookie. Il valore del cookie è un ticket di autenticazione form crittografato. Il cookie viene passato al server ad ogni richiesta per l'applicazione e la classe FormsAuthenticationModule decrittografa il valore del cookie e determina se l'utente è valido o meno.

Per impostazione predefinita, la classe FormsAuthenticationModule viene aggiunto nel file Machine. config. La classe FormsAuthenticationModule gestisce il processo di FormsAuthentication.

Di seguito è una voce dal file Machine. config:
<httpModule>     …other modules…
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
…other modules…
</httpModule>

Il traffico HTTP generale per l'autenticazione utilizzando l'autenticazione basata su form sarà simile al seguente:
  1. Il client invia un verbo HTTP GET a default. aspx. Non viene inviato alcun cookie di autenticazione form.
  2. Il server invia una risposta 302 (reindirizzamento) a Login. aspx.
  3. Il client invia un verbo HTTP POST al login. aspx. Include le informazioni di accesso.
  4. Il server invia una risposta 302 (reindirizzamento) per default. aspx. Il cookie di autenticazione form è incluso.
  5. Il client invia un verbo HTTP GET a default. aspx. Ciò include il cookie di autenticazione form.
Per ulteriori informazioni sull'implementazione e l'autenticazione basata su moduli, visitare i seguenti siti Web MSDN:Per ulteriori informazioni sulla condivisione di cookie di autenticazione form, visitare il seguente sito Web ASP.NET:

Motivi che un utente può essere reindirizzato alla pagina di accesso

Il cookie di autenticazione form viene perso

Scenario 1

In questo scenario, un utente accede al sito Web. Un certo punto, il client invia una richiesta al server e
Classe FormsAuthenticationModule non riceve il cookie. È possibile determinare se una richiesta dell'utente non contiene il cookie attivando la registrazione in Microsoft Internet Information Services (IIS) di cookie. A tale scopo, attenersi alla seguente procedura:
  1. Aprire IIS Microsoft Management Console (MMC).
  2. Il pulsante destro del sito Web e quindi fare clic su
    Le proprietà.
  3. Fare clic sulla scheda sito Web e quindi fare clic su Abilita registrazione.
  4. Assicurarsi che il formato di registro è Formato di File registro esteso W3C.
  5. Fare clic su Proprietà.
  6. Fare clic sulla scheda Avanzate e quindi fare clic su
    Le proprietà estese.
  7. In Extended Properties, fare clic per selezionare la casella di controllo Cookie(cs(Cookie)) e Referer (cs(Referer)) casella di controllo.
Quando si verifica questo problema, determinare quale client ha il problema e l'indirizzo IP del client. Filtrare il registro IIS su tale indirizzo IP del client e visualizzare la colonna <cookie>.

Nota: Log Parser è possibile utilizzare per analizzare i registri di IIS. Per scaricare Log Parser, visitare il seguente sito Web Microsoft:Dopo aver ottenuto l'elenco delle richieste provenienti da tale utente specifico, cercare le richieste alla pagina di accesso. Sapete, questi ultimi sono stati reindirizzati a questa pagina e si desidera visualizzare le richieste prima che si è verificato il reindirizzamento. Se viene visualizzato qualcosa di simile al seguente, il client sia non ha inviato il cookie o il cookie è stato rimosso in rete tra client e server.

Questo è l'accesso iniziale.
MetodoPaginaRispostaCookie
Ottieni/Default.aspx302 (reindirizzamento)Nessun cookie
Ottieni/Login.aspx200 (esito positivo)Nessun cookie
Inserisci/Login.aspx302 (reindirizzamento)Nessun cookie
Ottieni/Default.aspx200 (esito positivo).ASPXAUTH
Ottieni/SomePage.aspx302 (reindirizzamento)N. Cookie ASPXAUTH
Si tratta di altre richieste, seguite da una richiesta a una pagina nel sito senza il. Cookie ASPXAUTH.
MetodoPaginaRispostaCookie
Ottieni/SomePage.aspx302 (reindirizzamento)N. Cookie ASPXAUTH
Ottieni/Login.aspx200 (esito positivo)N. Cookie ASPXAUTH
Inserisci/Login.aspx302 (reindirizzamento)N. Cookie ASPXAUTH
Ottieni/SomePage.aspx200 (esito positivo).ASPXAUTH

Nota: La prima richiesta dall'utente in questione non è probabile che con un cookie di autenticazione, a meno che si sta creando un cookie persistente. Nel Registro di IIS verranno visualizzate solo i cookie ricevuti nella richiesta. La prima richiesta per il cookie di autenticazione form sarà presente la richiesta dopo un tentativo di accesso con esito positivo.
Scenario 2

Il cookie di autenticazione Form inoltre può andare perduto quando viene superato il limite di cookie del client. In Microsoft Internet Explorer, è previsto un limite di 20 cookie. Dopo aver creato il cookie 20 sul client, i cookie precedenti vengono rimossi dall'insieme del client. Se il. Cookie ASPXAUTH viene rimosso, l'utente verrà reindirizzato alla pagina di accesso quando viene elaborata la richiesta successiva.

Allo stesso modo, è possibile risolvere questi due scenari. Esaminare la richiesta prima che il reindirizzamento alla pagina di accesso. Se la richiesta a questa pagina genera i cookie, si tratterà di qualcosa da analizzare.

Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:

306070 numero e i limiti di dimensione di un cookie in Internet Explorer


Per visualizzare le intestazioni HTTP che vengono inviate al client, è possibile utilizzare Fiddler. Dopo aver acquisito il traffico, fare doppio clic su una richiesta e quindi fare clic su intestazioni per visualizzare l'intestazione Set-Cookie. Se si traccia un accesso con esito positivo, verrà visualizzato l'intestazione Set-Cookie nella risposta di un accesso con esito positivo.

Per scaricare Fiddler, visitare il seguente sito Web Fiddler:
Scenario 3

Dopo la richiesta del client, esistono vari livelli che possono influenzare i pacchetti inviati. Per determinare se una periferica di rete viene rimosso il cookie, è necessario acquisire una traccia di rete sul client e server e quindi ricercare nel corpo della richiesta per il cookie. Si desidera esaminare la richiesta del client per assicurarsi che il cookie è stato inviato e controllare la traccia del server per assicurarsi che il server ha ricevuto il cookie.

Richiesta del client

Si tratta di una richiesta GET dopo che l'utente è stato autenticato. Le informazioni di ticket di autenticazione form viene evidenziate in blu. Questo conferma che le informazioni del cookie del client a sinistra. Quando si utilizza uno strumento di acquisizione di rete, come Netmon, vedere il traffico che ha effettivamente attraverso la scheda.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local68 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

Richiesta server-side

Quando si esamina la richiesta che raggiunge il server, è possibile assicurarsi che il server ha ricevuto le stesse informazioni che il client ha inviato. Se il server non ha ricevuto le stesse informazioni, è necessario esaminare altre periferiche della rete per determinare quale il cookie è stato rimosso.

Nota: Sono inoltre state istanze dei filtri ISAPI, la rimozione dei cookie. Se si conferma che il server Web ha ricevuto il cookie, ma il cookie non è elencato nei registri di IIS, controllare i filtri ISAPI. Potrebbe essere necessario rimuovere i filtri per vedere se il problema è risolto.

Timeout del ticket di autenticazione dei form

Le altre cause comuni per reindirizzare un utente è se è scaduto il ticket di autenticazione form. Il ticket di autenticazione form il timeout in due modi. Il primo scenario si verifica se si utilizza la scadenza assoluta. Con la scadenza assoluta, il ticket di autenticazione scade quando scade il tempo di scadenza. Ad esempio, si imposta una scadenza di 20 minuti e un utente visita il sito 2:00 PM. L'utente verrà reindirizzato alla pagina di accesso se l'utente visita il sito dopo 2:20 PM.

Se si utilizza la scadenza, lo scenario è un po' più complicato. Il cookie e il ticket risultante vengono aggiornati se l'utente visita il sito dopo la scadenza è scaduto a metà. Ad esempio, impostare una scadenza di 20 minuti utilizzando la scadenza. Un utente visita il sito 2:00 PM e l'utente riceve un cookie che scadrà alle ore 2:20. La scadenza viene aggiornata solo se l'utente visita il sito dopo 2:10 PM. Se l'utente visita il sito alle ore 2:09, il ticket non viene aggiornato in quanto la metà del tempo di scadenza non ha superato. Se l'utente attende 12 minuti, visitare il sito alle ore 2:21, il ticket verrà scaduto. L'utente viene reindirizzato alla pagina di accesso.

È possibile approccio questo tipo di problema è registrare le informazioni di cookie e ticket di autenticazione form. In questo modo, è possibile vedere se il cookie è stato ricevuto da IIS e quali sono i valori. Tale scopo, è possibile scrivere un HttpModulee quindi collegare tale modulo nella pipeline delle richieste. Non è necessario modificare il codice dell'applicazione per ottenere le informazioni che necessarie.

L'esempio allegato funzionamento di Microsoft.NET Framework 1.1 e.NET Framework 2.0 e contiene i commenti in tutto. L'esempio include i seguenti file:Nota fornita un collegamento di download per il codice fornito nel file FormsAuthLogger.zip.

È necessario sottolineare le principali aree:

Come sempre, non esitate a inviare idee sugli argomenti di cui si desidera che in futuro indirizzati colonne o nella Knowledge Base utilizzando il
Modulo Ask For It .
Proprietà

ID articolo: 910439 - Ultima revisione: 30 gen 2017 - Revisione: 1

Feedback