Kuidas rakendada vormipõhise autentimise rakenduse ASP.net-i abil C #.NET

Artiklite tõlked Artiklite tõlked
Artikli ID: 301240 - Vaadake tooteid, millega see artikkel seostub.
Laienda kõik | Ahenda kõik

Sellel veebilehel

Kokkuvõte

See artikkel näitab, kuidas rakendada vormid põhinevad kasutades andmebaasi talletada kasutajate autentimine.

Nõuded

Järgnev loend visandab soovitatud riistvara, tarkvara, võrgu infrastruktuuri ja hoolduspaketid, mida vajate:
  • Microsoft Visual Studio .net-i
  • Microsoft Internet Information Services (IIS) versiooni 5.0 või uuem
  • Microsoft SQL serveri

C# .net-i rakendus ASP.net-i luua

  1. Saate avada Visual Studio .net-i.
  2. Uue ASP.NET veebirakenduse loomine ja määrake nimi ja asukoht.

Turvasätete konfigureerimine nii failis Web.config

Käesolevas jaos näitab, kuidas lisada ja muuta ning <authentication></authentication> ja <authorization></authorization> seadistada rakenduse ASP.net-i konfiguratsiooni lõigud Kasutage vormipõhine autentimine.
  1. Aknas lahenduste Explorer, avada fail Web.config.
  2. Muuda vormideautentimise re?iim.
  3. <Forms>Sildi lisada, ja täitke asjakohane atribuudid. (Nende atribuutide kohta lisateabe saamiseks vaadake MSDN dokumentatsiooni või QuickStart dokumente, mis on loetletud selle </Forms>VIITED jao.) Koopia on järgmine kood ja seejärel klõpsake nuppu Kleebi HTML-ina kohta ningRedigeeri menüü kleebi koodi ning <authentication></authentication> faili sektsiooni:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. Juurdepääsust Anonüümne kasutaja ning <authorization></authorization> lõik järgmiselt:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Proovi andmebaasi tabeli salvestada kasutajate andmed loomine

Käesolevas paragrahvis näitab, kuidas luua proovi andmebaasi Salvesta kasutajanimi, parool ja rolli kasutajate jaoks. Peate rolli veerg Kui soovite Kasutajarollide andmebaasis talletada ja rakendada Rollipõhine Turvalisus.
  1. Kohta ning Algus menüü, klõpsake nuppuKäivita, ja seejärel tippige Notepad avamiseks Notepad.
  2. Esile järgmiste SQL skripti kood, paremklõpsake selle kood ja seejärel klõpsake nuppu Kopeeri. Klõpsake NotepadisKleebi kohta ning Redigeeri menüü kleebi järgmised kood:
    if exists (select * from sysobjects where id = 
    object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[Users]
    GO
    CREATE TABLE [dbo].[Users] (
       [uname] [varchar] (15) NOT NULL ,
       [Pwd] [varchar] (25) NOT NULL ,
       [userRole] [varchar] (25) NOT NULL ,
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Users] WITH NOCHECK ADD 
       CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED 
       (
          [uname]
       )  ON [PRIMARY] 
    GO
    
    INSERT INTO Users values('user1','user1','Manager')
    INSERT INTO Users values('user2','user2','Admin')
    INSERT INTO Users values('user3','user3','User')
    GO
    					
  3. Salvestage fail nimega Users.sql.
  4. Microsoft SQL Server arvuti, avage Users.sql ja Päringu analüüsija. Andmebaaside loendist klõpsake nuppu pubid, ja skripti käivitada. See loob kasutajate näidistabeli ja asustab tabel Pubid andmebaasi kasutatakse selle valimi abil.

Logon.aspx lehe loomine

  1. Lisada uut veebi vormi nimega projekti Logon.aspx.
  2. Avatud Logon.aspx lehel selle redaktoris ja Lülita HTML-i Saate vaadata.
  3. Kopeerige järgmine kood ja kasutada selle Kleebi HTML-VORMINGUS võimalus ka Redigeeri menüüs Sisesta kood vahel on<form>Tags: </form>
    <h3>
       <font face="Verdana">Logon Page</font>
    </h3>
    <table>
       <tr>
          <td>Email:</td>
          <td><input id="txtUserName" type="text" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
               Display="Static" ErrorMessage="*" runat="server" 
               ID="vUserName" /></td>
       </tr>
       <tr>
          <td>Password:</td>
          <td><input id="txtUserPass" type="password" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
              Display="Static" ErrorMessage="*" runat="server" 
              ID="vUserPass" />
          </td>
       </tr>
       <tr>
          <td>Persistent Cookie:</td>
          <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
          <td></td>
       </tr>
    </table>
    <input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
    <asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />
    						
    Selle veebivormi abil sisselogimine vormi pakkuda kasutajatele, et nad saaksid pakkuda oma kasutajanimi ja parool sisselogimiseks taotluse.
  4. Aktiveerige kujundusvaade ja salvestage leht.

Sündmuseohjuri koodi nii, et ta kinnitab kasutaja mandaat

Selles rubriigis on esitatud koodi, mis on paigutatud code-behind lehekülg (Logon.aspx.cs).
  1. Topeltklõpsake Sisselogimine avamiseks ning Logon.aspx.cs faili.
  2. Impordi nõutav nimeruumide code-behind fail:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Luua ValidateUser funktsiooni, et kontrollida kasutaja mandaati vaadates on andmebaasi. (Veenduge, et muudate ühendusstringi punkti oma andmebaas).
    private bool ValidateUser( string userName, string passWord )
    {
    	SqlConnection conn;
    	SqlCommand cmd;
    	string lookupPassword = null;
    
    	// Check for invalid userName.
    	// userName must not be null and must be between 1 and 15 characters.
    	if ( (  null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
    		return false;
    	}
    
    	// Check for invalid passWord.
    	// passWord must not be null and must be between 1 and 25 characters.
    	if ( (  null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
    		return false;
    	}
    
    	try
    	{
    		// Consult with your SQL Server administrator for an appropriate connection
    		// string to use to connect to your local SQL Server.
    		conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
    		conn.Open();
    
    		// Create SqlCommand to select pwd field from users table given supplied userName.
    		cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
    		cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
    		cmd.Parameters["@userName"].Value = userName;
    
    		// Execute command and fetch pwd field into lookupPassword string.
    		lookupPassword = (string) cmd.ExecuteScalar();
    
    		// Cleanup command and connection objects.
    		cmd.Dispose();
    		conn.Dispose();
    	}
    	catch ( Exception ex )
    	{
    		// Add error handling here for debugging.
    		// This error message should not be sent back to the caller.
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
    	}
    
    	// If no password found, return false.
    	if ( null == lookupPassword ) 
    	{
    		// You could write failed login attempts here to event log for additional security.
    		return false;
    	}
    
    	// Compare lookupPassword and input passWord, using a case-sensitive comparison.
    	return ( 0 == string.Compare( lookupPassword, passWord, false ) );
    
    }
    					
  4. Saate valida ühe kahest meetodist vormide loomiseks autentimiseks küpsis ja suunata sobilikku lehel cmdLogin_ServerClick juhul, kui kasutaja. Proovi kood on ette nähtud mõlema stsenaariumi. Kasutage ühte neid vastavalt oma nõuet.
    • Helista RedirectFromLoginPage meetod automaatselt genereerida vormide autentimiseks küpsise ja suunab kasutaja sobilikku lehel cmdLogin_ServerClick juhul, kui:
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
      if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
      	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
      		chkPersistCookie.Checked);
      	else
      		Response.Redirect("logon.aspx", true);
      }
      						
    • Luua autentimise Piletite, krüptida, see, loomine küpsis, lisage see vastus ja suunata kasutaja. See annab sulle rohkem Kuidas luua küpsise kontrolli. Saate lisada kohandatud andmed koos FormsAuthenticationTicket sel juhul.
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
         if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
         {
            FormsAuthenticationTicket tkt;
            string cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
      DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
            cookiestr = FormsAuthentication.Encrypt(tkt);
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            if (chkPersistCookie.Checked)
            ck.Expires=tkt.Expiration;	
      		    ck.Path = FormsAuthentication.FormsCookiePath; 
            Response.Cookies.Add(ck);
      
            string strRedirect;
            strRedirect = Request["ReturnUrl"];
            if (strRedirect==null)
                  strRedirect = "default.aspx";
               Response.Redirect(strRedirect, true);
         }
         else
            Response.Redirect("logon.aspx", true);
      }
      						
  5. Veenduge, et InitializeComponent meetodi kood, Web vormikujundaja loob lisatakse järgmine kood:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Default.aspx lehe loomine

Käesolevas jaos loob test leht, kuhu kasutajad suunatakse pärast seda, kui nad autentida. Kui kasutajad sirvivad sellele lehele ilma esimest sisselogimist kohaldamist, suunatakse nad sisselogimise lehele.
  1. Olemasolevate WebForm1.aspx lehe Default.aspx, ümber nimetada ja avada see redaktoris.
  2. Aktiveerige HTML-i vaade ja kopeerida järgneva koodi vahel selle<form>Tags: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Seda nuppu kasutatakse välja logida vormide autentimist istungil.
  3. Aktiveerige kujundusvaade ja salvestage leht.
  4. Impordi nõutav nimeruumide code-behind fail:
    using System.Web.Security;
    					
  5. Topeltklõpsake SignOut avatud code-behind leht (Default.aspx.cs) ja koopia ning sündmuseohjuri cmdSignOut_ServerClick järgmine kood:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Veenduge, et InitializeComponent meetodi kood, Web vormikujundaja loob lisatakse järgmine kood:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Salvesta ja koostada projekti. Nüüd saate kasutada ka rakendus.

Täiendavad märkused

  • Võite talletada paroole turvaliselt andmebaasi. Te Võite kasutada FormsAuthentication klassi kasuliku funktsiooni nimega HashPasswordForStoringInConfigFile Krüpti paroolid, enne kui te need andmebaasis talletada või konfiguratsioonifaili.
  • Soovite salvestada SQL-i ühendus teave selle konfiguratsiooni faili (Web.config), nii et saate kergesti muuta see, kui vajalik.
  • Võite soovi korral lisada koodi häkkerid, kes üritavad tõkestamiseks kasutada erinevaid kombinatsioone paroolid sisselogimise. Näiteks saate lisada loogika, mis aktsepteerib ainult kaks või kolm nurjunud sisselogimiskatsed. Kui kasutaja ei saa katsete arv logida, võite seada lipu, mille andmebaasi ei luba sellel kasutajal sisse logida seni, kuni see kasutaja peab tema uuesti lubama oma konto külastades mõnele muule lehele või helistades oma toetust kooskõlas. Aastal Lisaks, sa peaksid lisama kohane vea käsitsemine võimaluse korral vajalik.
  • Kuna kasutaja tuvastatakse põhinev autentimine küpsis, võiksite kasutada Secure Sockets Layer (SSL) selle taotluse nii et keegi petab autentimiseks küpsiseid ja muid väärtuslikke teave, mis saadetakse.
  • Vormipõhine autentimine nõuab, et teie klient aktsepteerib või lubada küpsiseid oma brauseris.
  • Ajalõpu parameeter on <authentication></authentication> konfigureerimise jaotisest kontrollib intervalli, mille on autentimiseks küpsis on regenereeritud. Saate valida väärtuse, mis pakub parem jõudlus- ja turvalisustaseme.
  • Teatud vahendaja volikirju ja vahemälud Internetis võib vahemälu Web server vastused, mis sisaldavad komplekt-küpsise päised, mis on siis tagasi mõne teise kasutaja. Kuna vormipõhise autentimise kasutab küpsis kasutajate autentimiseks, see võib põhjustada kasutajatele kogemata (või tahtlikult) kehastama teise kasutaja saanud küpsise vahendaja volikirja või vahemälu, mis oli algselt mõeldud neile.

Viited

Lisateavet kuidas rakendada lihtne Vormipõhine autentimine, mida kasutab ka <credentials></credentials> jagu säilitada kasutajate ja paroolid, lähtuge GotDotNet ASP.net-i QuickStart valim:
Vormipõhine autentimine
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Lisateavet kuidas rakendada vormid põhinevad kasutab XML-faili, et salvestada kasutajate ja paroolid, autentimine viidata selle Järgmine teema .NET raamistiku tarkvara arendamise arenduskomplektist (SDK) dokumentatsioon:
Vormide autentimist kasutades XML-faili, kasutajad
http://msdn2.microsoft.com/en-us/Library/1b1y85bh (vs.71) .aspx
Lisateavet ASP.NET veebirakenduse turvalisuse, Vaadake järgmist Microsofti .NET Frameworki tootearendaja juhend dokumentatsioon:
ASP.net-i veebirakenduse turvalisuse
http://msdn2.microsoft.com/en-us/Library/330a99hc (vs.71) .aspx
System.Web.Security nimeruumi kohta lisateabe saamiseks vaadake järgmisi Microsoft .NET Framework Dokumentides:
System.Web.Security Namespace
http://msdn2.microsoft.com/en-us/Library/System.Web.Security (vs.71) .aspx
ASP.net-i konfigureerimise kohta lisateabe saamiseks vaadake selle järgmised Microsoft .NET Framework Developer's Guide artiklid:
ASP.net-i konfiguratsiooni
http://msdn2.microsoft.com/en-us/Library/aa719558 (VS.71) .aspx

ASP.net-i konfiguratsiooni lõigud
http://msdn2.microsoft.com/en-us/Library/w7w4sb0w (vs.71) .aspx
ASP.NET turvalisuse suuniste kohta teabe saamiseks vaadake järgmist MSDN-i valge raamat:
ASP.net-i autentimine: .NET turvalisuse juhend
http://msdn2.microsoft.com/en-us/Library/ms978378.aspx

Atribuudid

Artikli ID: 301240 - Viimati läbi vaadatud: 7. juuni 2013 - Redaktsioon: 1.0
Kehtib järgmise lõigu kohta:
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
Märksõnad: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtet
Masintõlgitud
NB! Artikkel on tõlgitud Microsofti masintõlketarkvaraga ja seda saab parandada Kogukonnapõhise tõlkeraamistiku (CTF) tehnoloogiaga. Microsoft pakub masintõlgitud, kogukonna järeltöödeldud ja inimtõlgitud artikleid, et anda mitmekeelne juurdepääs kõigile meie teabebaasi artiklitele. Masintõlgitud ja järeltöödeldud artiklites võib olla sõnavara-, süntaksi- ja/või grammatikavigu. Microsoft ei vastuta mingite ebatäpsuste, tõrgete ega kahjude eest, mis on tulenenud sisu valest tõlkest või selle kasutamisest meie klientide poolt. Lisateavet CTF-i kohta leiate aadressilt http://support.microsoft.com/gp/machine-translation-corrections/et.
Artikli ingliskeelse versiooni kuvamiseks klõpsake siin: 301240

Andke tagasisidet

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com