ASP .NET-tuen äänisarake

Lomakkeiden todennuksen vianmääritys

Tervetuloa ASP.NET Support Voice -sarakkeeseen! Nimeni on Jerry Orman. Olen ollut Microsoftin kanssa yli 5 vuotta ja olen käyttänyt suurimman osan ajastani keskittyen verkkoihin liittyviin teknologioihin, kuten Microsoft FrontPageen ja uusiin Microsoft SharePoint -teknologioihin. Olen työskennellyt viimeisen vuoden Microsoft ASP.NET kanssa tukiteknikkona. Tässä kuussa Tuen ääni -sarakkeessa aion selittää, miten voit tehdä lomakkeiden todennuksen vianmäärityksen Microsoft ASP.NET.

Lomakkeiden todennuksen vianmääritys

Kun käytät lomakkeiden todentamista ASP.NET sovelluksessa, saatat joutua tekemään vianmäärityksen ongelmaan, joka ilmenee, kun käyttäjä ohjataan satunnaisesti kirjautumissivulle. Ihannemaailmassa tämä ongelma ilmeni tavalla, jonka avulla voit helposti liittää virheenkorjauksen ja vangita ongelman. Tuotantoympäristöissä näin on kuitenkin harvoin. Tämän kaltaisen satunnaisen ongelman vianmääritys edellyttää, että kirjaat ongelmaan liittyvät tiedot, jotta voit tarkentaa perimmäistä syytä.Tässä sarakkeessa käsitellään lyhyesti Forms Authentication -käsitettä. Tutkimme sitten, mitkä skenaariot johtavat siihen, että käyttäjä ohjataan kirjautumissivulle ja miten voit tallentaa tietoja, jotka liittyvät ongelman eristämiseen. Käsittelemme myös sitä, miten IHttpModule-käyttöliittymä voidaan ottaa käyttöön lomakkeiden todennustietojen kirjaamista varten.

Lomakkeiden todentamisen yleiskatsaus

Kun käyttäjä todentaa sivuston forms authentication -toiminnolla, palvelin luo evästeen. Evästeen arvo on salattujen lomakkeiden todennuslippu. Eväste välitetään palvelimelle jokaisen sovelluksen pyynnön yhteydessä, ja FormsAuthenticationModule-luokka purkaa evästearvon salauksen ja määrittää, onko käyttäjä kelvollinen vai ei.FormsAuthenticationModule-luokka lisätään oletusarvoisesti Machine.config-tiedostoon. FormsAuthenticationModule-luokka hallitsee FormsAuthentication-prosessia.Seuraava on merkintä Machine.config-tiedostosta:

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

Yleinen HTTP-liikenne todennusta varten forms-todennuksen avulla näyttää seuraavan kaltaiselta:

  1. Asiakas lähettää HTTP GET -tiedoston Default.aspx-sivustoon. Lomakkeiden todennusevästettä ei lähetetä.

  2. Palvelin lähettää 302-vastauksen (uudelleenohjauksen) osoitteeseen Login.aspx.

  3. Asiakas lähettää HTTP POST -viestin osoitteeseen Login.aspx. Se sisältää kirjautumistiedot.

  4. Palvelin lähettää 302-vastauksen (uudelleenohjauksen) osoitteeseen Default.aspx. Lomakkeiden todennuseväste sisältyy.

  5. Asiakas lähettää HTTP GET -tiedoston Default.aspx-sivustoon. Tämä sisältää lomakkeiden todennuseväskin.

Lisätietoja lomakkeiden todentamisen käyttöönotosta ja käyttämisestä on seuraavissa MSDN-sivustoissa:

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).aspxLisätietoja lomakkeiden todennusevästeitä jaettaessa on seuraavassa ASP.NET-sivustossa:

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

Syitä siihen, miksi käyttäjä voidaan ohjata kirjautumissivulle

Lomakkeiden todennuseväste menetetään

Skenaario 1

Tässä skenaariossa käyttäjä kirjautuu sivustoon. Jossain vaiheessa asiakas lähettää pyynnön palvelimelle ja FormsAuthenticationModule-luokka ei saa evästettä. Voit määrittää, jos käyttäjäpyyntö ei sisällä evästettä ottamalla evästeiden kirjaamisen käyttöön Microsoft IIS (IIS). Toimi seuraavasti:

  1. Avaa IIS Microsoft Management Console (MMC) -konsoli.

  2. Napsauta sivustoa hiiren kakkospainikkeella ja valitse sittenOminaisuudet.

  3. Valitse Sivusto-välilehti ja valitse sitten Ota kirjaaminen käyttöön.

  4. Varmista, että lokimuoto on laajennettu W3C-lokitiedostomuoto.

  5. Valitse Ominaisuudet.

  6. Valitse Lisäasetukset-välilehti ja valitse sittenLaajennetut ominaisuudet.

  7. Valitse Laajennetut ominaisuudet -kohdassa Eväste(cs(eväste)) -valintaruutu ja Viite (cs(Viite)) -valintaruutu.

Kun tämä ongelma ilmenee, määritä, millä asiakkaalla oli ongelma ja kyseisen asiakkaan IP-osoite. Suodata asiakkaan IP-osoitteen IIS-loki ja tarkastele <evästeen> saraketta.Huomautus Voit jäsentää IIS-lokit Lokin jäsennystoiminnon avulla. Voit ladata log parserin seuraavasta Microsoftin verkkosivustosta:

http://www.microsoft.com/download/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07 Kun olet saanut luettelon kyseisen käyttäjän pyynnöistä, etsi pyynnöt kirjautumissivulle. Tiedät, että ne on ohjattu tälle sivulle, ja haluat nähdä pyynnöt ennen uudelleenohjauksen tapahtumista. Jos näet jotain seuraavantyyppistä, asiakas ei joko lähettänyt evästettä tai eväste poistettiin asiakkaan ja palvelimen välisestä verkosta.Tämä on ensimmäinen kirjautumiskirjautuminen.

Menetelmä

Sivu

Vastaus

Evästeet

SAADA

/Default.aspx

302 (Uudelleenohjaus)

Ei evästeitä

SAADA

/Login.aspx

200 (menestys)

Ei evästeitä

VIESTI

/Login.aspx

302 (Uudelleenohjaus)

Ei evästeitä

SAADA

/Default.aspx

200 (menestys)

. ASPXAUTH

SAADA

/SomePage.aspx

302 (Uudelleenohjaus)

Ei. ASPXAUTH-eväste

Nämä ovat muita pyyntöjä, joita seuraa pyyntö sivustossa olevalle sivulle ilman . ASPXAUTH-eväste.

Menetelmä

Sivu

Vastaus

Evästeet

SAADA

/SomePage.aspx

302 (Uudelleenohjaus)

Ei. ASPXAUTH-eväste

SAADA

/Login.aspx

200 (menestys)

Ei. ASPXAUTH-eväste

VIESTI

/Login.aspx

302 (Uudelleenohjaus)

Ei. ASPXAUTH-eväste

SAADA

/SomePage.aspx

200 (menestys)

. ASPXAUTH

Huomautus Käyttäjän ensimmäisellä pyynnöllä ei todennäköisesti ole lomakkeiden todennusevästettä, ellet luo pysyvää evästettä. IIS-loki näyttää vain pyynnössä vastaanotetut evästeet. Ensimmäinen pyyntö saada lomakkeiden todennuseväste on pyynnössä onnistuneen kirjautumisyrityksen jälkeen.

Skenaario 2

Lomakkeiden todennuseväste voidaan menettää myös silloin, kun asiakkaan evästeraja ylittyy. Microsoft Internet Explorerissa evästeiden enimmäismäärä on 20. Kun 20. eväste on luotu asiakkaalle, aiemmat evästeet poistetaan asiakkaan kokoelmasta. Jos . ASPXAUTH-eväste poistetaan, käyttäjä ohjataan kirjautumissivulle, kun seuraava pyyntö käsitellään.Voit tehdä näiden kahden tilanteen vianmäärityksen samalla tavalla. Katso pyyntöä juuri ennen uudelleenohjausta kirjautumissivulle. Jos tämän sivun pyyntö luo evästeitä, tämä on tutkittavaa.Fiddlerin avulla voit tarkastella asiakkaalle lähetettyjä HTTP-otsikoita. Kun olet siepannut liikenteen, kaksoisnapsauta pyyntöä ja napsauta sitten Otsikot nähdäksesi Set-Cookie ylätunnisteen. Jos jäljität onnistuneen kirjautumisen, näet Set-Cookie-otsikon onnistuneen kirjautumisen vastauksessa.Voit ladata Fiddlerin seuraavasta Fiddler-verkkosivustosta:

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

Skenaario 3

Kun pyyntö on poistunut asiakkaasta, on useita kerroksia, jotka voivat vaikuttaa lähetettyihin paketteihin. Jotta voit selvittää, poistaako verkkolaite evästeen, sinun on tallennettava verkkojäljite asiakkaaseen ja palvelimeen ja etsittävä sitten evästepyynnön tekstiosasta. Haluat tarkastella asiakaspyyntöä varmistaaksesi, että eväste on lähetetty, ja tarkistaa palvelimen jäljitys varmistaaksesi, että palvelin on vastaanottanut evästeen.Asiakaspyyntö Tämä on GET-pyyntö, kun käyttäjä on todennettu. Lomakkeiden todennuslipputiedot on korostettu sinisellä. Tämä vahvistaa, että evästetiedot poistuivat asiakkaalta. Kun käytät verkon sieppaustyökalua, kuten Netmonia, näet sovittimen läpi kulkevan liikenteen.

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

Palvelinpuolen pyyntö Kun tarkastelet pyyntöä, joka saapui palvelimeen, haluat varmistaa, että palvelin on vastaanottanut samat tiedot kuin asiakas lähetti. Jos palvelin ei saanut samoja tietoja, sinun on tutkittava verkon muita laitteita selvittääksesi, mistä eväste on poistettu.Huomautus Myös ISAPI-suodattimien esiintymät ovat poistaneet evästeitä. Jos vahvistat, että verkkopalvelin on vastaanottanut evästeen, mutta evästettä ei ole lueteltu IIS-lokeissa, tarkista ISAPI-suodattimet. Saatat joutua poistamaan suodattimet, jotta näet, onko ongelma ratkaistu.

Lomakkeiden todennuslippu aikakatkaistaan

Toinen yleinen syy käyttäjän uudelleenohjaukseen on se, että lomakkeiden todennuspyyntö on vanhentunut. Lomakkeiden todennuslippu voidaan aikaistaa kahdella tavalla. Ensimmäinen skenaario tapahtuu, jos käytät absoluuttista vanhenemista. Absoluuttisen vanhentumisen jälkeen todennuspyyntö vanhenee, kun vanhentumisaika päättyy. Määrität esimerkiksi 20 minuutin vanhenemisen ja käyttäjä käy sivustossa klo 14.00. Käyttäjä ohjataan kirjautumissivulle, jos käyttäjä käy sivustolla klo 14.20 jälkeen.Jos käytät liukuvan vanhenemisen, tilanne on hieman monimutkaisempi. Eväste ja tuloksena oleva lippu päivitetään, jos käyttäjä käy sivustolla vanhentumisajan päätyttyä. Voit esimerkiksi määrittää vanhenemisen 20 minuutiksi liukuvan vanhenemisen avulla. Käyttäjä käy sivustolla klo 14.00 ja käyttäjä saa evästeen, jonka on määrä vanhentua klo 14.20. Vanhentuminen päivitetään vain, jos käyttäjä käy sivustolla klo 14.10 jälkeen. Jos käyttäjä käy sivustolla klo 14.09, lippua ei päivitetä, koska puolet vanhentumisajasta ei ole kulunut. Jos käyttäjä odottaa 12 minuuttia ja käy sivustolla klo 14.21, lippu vanhenee. Käyttäjä ohjataan kirjautumissivulle.Yksi tapa lähestyä tämäntyyppistä ongelmaa on kirjata lomakkeiden todennuseväste ja lipputiedot. Näin näet, onko IIS vastaanottanut evästeen ja mitkä ovat arvot. Voit tehdä tämän kirjoittamalla HttpModule-moduulin ja liittämällä sitten moduulin pyyntöputkeen. Sinun ei tarvitse muokata sovelluksen koodia saadaksesi tarvitsemasi tiedot.Liitetty malli toimii Microsoft .NET Framework 1.1:ssä ja .NET Framework 2.0:ssa, ja siinä on kommentteja kaikkialla. Esimerkki sisältää seuraavat tiedostot:

  • FormsAuthEvents.cs: Luokka, joka toteuttaa IHttpModule-sovelluksen ja sitoo Application_BeginRequest tapahtumaan.

  • FormsAuthInfo.cs: Luokka, joka noutaa evästeen ja purkaa lomakkeiden todennuslipun salauksen. Se tarkistaa myös sovelluksen Web.config tiedoston varmistaakseen, että lomakkeiden todennus on käytössä.

  • FormsAuthConfig.cs: luokka, joka lukee FormsAuthLogger.config tiedoston tietoja.

  • Log.cs: Tiedosto, joka hyväksyy merkkijononmuodostimen ja kirjoittaa arvot lokitiedostoon.

  • FormsAuthLogger.config: XML-tiedosto, jonka Log.cs-tiedosto lukee. Tämän tiedoston on oltava /bin-kansiossa, jossa on sisäinen DLL. Tiedoston avulla voit määrittää seuraavat asetukset:

    • Suodata IP:n mukaan: Voit suodattaa tietojen tallennuksen asiakkaan IP-osoitteen mukaan. Näin voit kirjata vain sellaisen asiakkaan pyynnöt, jonka tiedetään toistavan ongelman. Tämä pienentää lokin kokoa.

    • Sieppaustyyppi: Tämä määrittää tiedoston tallennussijainnin. Oletusarvona on Väliaikaiset ASP.NET Tiedostot -kansio, mutta voit tallentaa sen minne tahansa, kunhan työntekijäprosessitili voi kirjoittaa kansioon.

Huomautus Toimitan latauslinkin FormsAuthLogger.zip tiedostossa olevalle koodille.Osoitan tärkeimmät alueet täällä:

  1. Luo luokka, joka ottaa käyttöön IHttpModule -käyttöliittymän.

    public class FormsAuthEvents : IHttpModule 
    {
    …code…
    }
  2. Järjestä tapahtuma, jota haluat tarkastella. Tässä esimerkissä käytetään Application_BeginRequest tapahtumaa. Näin voimme tutkia jokaisen pyynnön ja selvittää, onko sillä lomakkeiden todennuseväste, ja kirjata FormsAuthenticationTicket, jos eväste on siellä.

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

    private void Application_BeginRequest(Object source, EventArgs e)
    {
       …code to log the ticket…
    }
    
  4. Nouda lomakkeiden todennuseväste ja pura sen salaus.

  5. Kirjaa arvot. Suosittelen kirjaamaan seuraavat tiedot lomakkeiden tietojen lisäksi. Näin voit tarvittaessa järjestää lomakkeiden todennustiedot IIS-lokeihin:

    • Päivämäärä: Näyttää, milloin pyyntö on tullut.

    • RequestType: Näyttää, onko pyyntö Nouda vai Julkaisu.

    • URL: Näyttää ongelmaan johtavien pyyntöjen kuvion.

    • Viittaava

    • ClientIP: Linkittää pyynnöissä tiettyyn asiakkaaseen.

Tarvitsetko lisäohjeita?

Haluatko lisää vaihtoehtoja?

Tutustu tilausetuihin, selaa harjoituskursseja, opi suojaamaan laitteesi ja paljon muuta.