Cum să pună în aplicare autentificare pe bază de formulare în aplicația de ASP.NET cu ajutorul C #.NET

Traduceri articole Traduceri articole
ID articol: 301240 - View products that this article applies to.
Măriți totul | Reduceți totul

În această pagină

Rezumat

Acest articol arată cum să pună în aplicare pe bază de formulare autentificare folosind o bază acoperire de date pentru a stoca utilizatorilor.

Cerințele

Listă tabel următoare evidențiază hardware recomandate, software-ul, infrastructura de retea, și pachete de service care aveți nevoie:
  • Microsoft Visual Studio .NET
  • Microsoft Internet Information Services (IIS) versiunea 5.0 sau mai târziu
  • Microsoft SQL Server

Creați o cerere de ASP.NET folosind C# .NET

  1. Deschide Visual Studio .NET.
  2. Crea o nouă aplica?ie ASP.NET Web, și specificați nume de sign-in și locația.

Configurați setările de securitate din fi?ierul Web.config

Această secțiune demonstrează cum să adăugați și să modifice <authentication></authentication> și <authorization></authorization> secțiuni de configurare pentru a configura aplica?ia ASP.NET utilizați autentificarea bazată pe formulare.
  1. În soluție de Explorer, deschide?i fi?ierul Web.config.
  2. Modifică modul de autentificare formulare.
  3. Introduceți eticheta de <Forms>, și umple corespunzătoare atribute. (Pentru mai multe informații despre aceste atribute, se referă la MSDN documentația sau documentația QuickStart listate în </Forms>REFERIN?E secțiune.) Copie următorul cod, și apoi faceți clic pe Lipire ca HTML peEditare meniu să lipiți codul în <authentication></authentication> secțiune a fișierului:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. Refuza acorda acces la utilizatorul anonim în <authorization></authorization> secțiune, după cum urmează:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Creați un tabel de baze acoperire de date eșantion la magazin utilizatorii detalii

Această secțiune demonstrează cum se creează un eșantion acoperire de date stoca nume de sign-in de utilizator, parola și rolul pentru utilizatori. Aveți nevoie de coloana de rol Dacă doriți pentru a stoca rolurile de utilizator în baza acoperire de date și punerea în aplicare bazate pe rol securitate.
  1. Pe Începe meniu, faceți clic peAlerga, apoi tastați Notepad pentru a deschide Notepad.
  2. Evidenția codul de script SQL următoare, faceți clic dreapta pe cod, și apoi faceți clic pe Copie. În Notepad, faceți clic pePastă pe Editare meniu pentru a lipi următoarele cod:
    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. Salvați fișierul ca Users.sql.
  4. Pe computerul Microsoft SQL Server, deschide Users.sql în Query Analyzer. Din Listă tabel de baze acoperire de date, faceți clic pe pub-uri, și rula script-ul. Acest lucru creează un tabel de utilizatori de probă și populează tabelul în baza acoperire de date de pub-uri să fie utilizat cu această cerere de probă.

Crea?i o pagină de Logon.aspx

  1. Adauga un nou formular Web la proiectul numit Logon.aspx.
  2. Deschide pagina de Logon.aspx în editorul, și trecerea la HTML Vezi.
  3. Copiați următorul cod, și de a folosi Lipire ca HTML opțiunea pe Editare meniu pentru a introduce codul între<form>Tag-uri: </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" />
    						
    Acest formular Web este utilizat pentru a prezenta un formular de conecta la utilizatori astfel încât acestea pot furnizați nume de sign-in de utilizator și parola la conecta la aplicarea lor.
  4. Comuta?i la vizualizare Proiect proiect ?i salva?i pagina.

Cod de tratare a evenimentului, astfel încât se validează acreditările de utilizator

Aceasta sectiune prezinta codul care este plasat în spatele codul Pagina (Logon.aspx.cs).
  1. Faceți dublu clic pe conecta pentru a deschide Logon.aspx.CS fișier.
  2. Import necesare spații de nume în codul-spatele dosar:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Creare funcție ValidateUser pentru a valida acreditările de utilizator prin căutarea în baza acoperire de date. (Asigurați-vă că modificați ?irul de conexiune pentru a indica spre dumneavoastră baza de date).
    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. Utilizați unul dintre două metode pentru a genera formele autentificare cookie și redirecționa utilizatorul la o pagină corespunzătoare în cazul în cmdLogin_ServerClick . Mostre de cod este prevăzută pentru ambele scenarii. Utilizați oricare din le în funcție de cerința dvs.
    • apel sosit metoda RedirectFromLoginPage pentru a genera automat cookie-ul de autentificare formulare și redirecționa utilizatorul la o pagină corespunzătoare în cazul în cmdLogin_ServerClick :
      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);
      }
      						
    • Genera biletul de autentificare, cripta, de a crea un cookie, adăugați-l la răspunsul, și redirecționa utilizatorului. Acest lucru vă oferă mai mult de control în modul creați cookie-ul. Aveți posibilitatea să includeți date personalizate-a lungul cu FormsAuthenticationTicket în acest caz.
      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. Asigurați-vă că următorul cod este adăugat la metoda InitializeComponent din codul pe care generează proiectantul formularului Web:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Crea o pagina Default.aspx

Această secțiune se creează o pagină de test la care utilizatorii sunt redirec?iona?i după ce le autentifica. Dacă utilizatorii naviga la această pagină fără prima logare la cerere, ele sunt redirecționat către pagina de conecta.
  1. Redenumiți pagina WebForm1.aspx existentă ca Default.aspx, și se deschide în editor.
  2. Comuta?i la vizualizarea HTML, și copiați codul de următoarele între The<form>Tag-uri: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Acest buton este utilizat pentru a face Log off autentificare formulare sesiune.
  3. Comuta?i la vizualizare Proiect proiect ?i salva?i pagina.
  4. Import necesare spații de nume în codul-spatele dosar:
    using System.Web.Security;
    					
  5. Faceți dublu clic pe SignOut deschis cod-spatele pagina (Default.aspx.cs), și copie următorul cod în cmdSignOut_ServerClick de tratare a evenimentului:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Asigurați-vă că următorul cod este adăugat la metoda InitializeComponent din codul pe care generează proiectantul formularului Web:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Salvați și compila proiect. Puteți utiliza acum cerere.

Note suplimentare

  • Poate doriți să stocați parole în siguranță în baza acoperire de date. Tu Puteți utiliza funcția FormsAuthentication clasa utilitate numit HashPasswordForStoringInConfigFile pentru a cripta parola înainte de a le stocați în baza acoperire de date sau fișier de configurare.
  • Poate doriți pentru a stoca informațiile de conectare SQL în configurare fișier (Web.config), astfel încât vă puteți modifica ușor dacă necesare.
  • Vă poate lua în considerare adăugarea de cod pentru a preveni hackeri care încearcă să utilizați diferite combinații de parolele de logare pe. De exemplu, se poate includ logica care acceptă numai două sau trei încercări de conecta. Dacă utilizatorul nu poate conecta într-un anumit număr de încercări, poate doriți să stabiliți o semnalizare baza acoperire de date nu permite acel utilizator să facă conecta, până când acel utilizator re-enables lui sau ei cont de a vizita o altă pagină sau sunând la linia de suport. În plus, ar trebui să adăugați corespunzătoare eroare de manipulare ori de câte ori necesare.
  • Deoarece utilizatorul este identificat bazate pe autentificare cookie-ul, poate doriți să utiliza?i Secure Sockets Layer (SSL) această aplica?ie atât că nici unul poate induce în eroare autentificare cookie și orice alte valoroase informații care se transfer?.
  • Formularele bazate pe autentificare necesită că clientul acceptă sau activa cookie-urile browser-ul lor.
  • Parametrul de expirare al <authentication></authentication> secțiunea configurare controlează intervalul la care autentificare cookie este regenerat. Puteți alege o valoare care oferă o mai bună performanță și securitate.
  • Anumite proxy-uri intermediare și cache pe Internet poate cache-ul de server web răspunsuri care conțin anteturi Set-Cookie, care sunt apoi a revenit la un alt utilizator. Pentru autentificarea bazată pe formulare foloseste un cookie pentru a autentifica utilizatorii, acest lucru poate provoca utilizatorilor de a accidental (sau în mod intenționat) În redare la rolul unui alt utilizator de primirea unui cookie la un proxy de intermediar sau cache care nu a fost inițial destinat pentru ei.

Referințe

Pentru mai multe informații despre cum să pună în aplicare simplă autentificarea bazată pe formulare care utilizează <credentials></credentials> secțiunea pentru a stoca utilizatori și parole, se referă la următoarele GotDotNet ASP.NET QuickStart eșantion:
Autentificarea bazată pe formulare
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Pentru mai multe informații despre cum să pună în aplicare pe bază de formulare autentificare care utilizează un fișier XML pentru a stoca utilizatori și parole, se referă la următorul subiect în .NET Framework Software Development Kit (SDK) Documentație:
Autentificare formulare utilizând un fișier XML de utilizatori
http://msdn2.Microsoft.com/en-us/library/1b1y85bh (vs.71) .aspx
Pentru mai multe informații despre securitate aplica?ie ASP.NET Web, se referă la următoarele Microsoft .NET Framework Developer's Guide Documentație:
ASP.NET Web Application Security
http://msdn2.Microsoft.com/en-us/library/330a99hc (vs.71) .aspx
Pentru mai multe informații despre spa?iul de nume al System.Web.Security , se referă la următoarele Microsoft .NET Framework Documentație de referință:
System.Web.Security Namespace
http://msdn2.Microsoft.com/en-us/library/System.Web.Security (vs.71) .aspx
Pentru mai multe informa?ii despre configura?ie ASP.NET, se referă la următoarele Microsoft .NET Framework Developer's Guide articolele:
Configura?ie ASP.NET
http://msdn2.Microsoft.com/en-us/library/aa719558 (VS.71) .aspx

Secțiunile de configura?ie ASP.NET
http://msdn2.Microsoft.com/en-us/library/w7w4sb0w (vs.71) .aspx
Pentru informații despre liniile directoare de securitate ASP.NET, se referă la următoarele carte albă MSDN:
Autentificare în ASP.NET: Ghidul de securitate .NET
http://msdn2.Microsoft.com/en-us/library/ms978378.aspx

Proprietă?i

ID articol: 301240 - Ultima examinare: 15 noiembrie 2012 - Revizie: 1.0
Se aplică la:
  • 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
Cuvinte cheie: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtro
Traducere automată
IMPORTANT: Acest articol a fost tradus de software-ul de traducere automată Microsoft, si nu de un traducător. Microsoft vă oferă atât articole traduse de persoane, cât și articole traduse automat, astfel incat aveti access la toate articolele din Baza noastră de informatii în limba dvs. materna. Totuși, un articol tradus automat nu este întotdeauna perfect. Acesta poate conține greșeli de vocabular, sintaxă sau gramatică, la fel cum un vorbitor străin poate face greșeli vorbind limba dvs. materna. Compania Microsoft nu este responsabilă pentru nici o inexactitate, eroare sau daună cauzată de traducerea necorespunzătoare a conținutului sau de utilizarea traducerii necorespunzătoare de către clienții nostri. De asemenea, Microsoft actualizează frecvent software-ul de traducere automată.
Face?i clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 301240

Trimite?i feedback

 

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