Momentan sunteți offline, așteptați să vă reconectați la internet

Browserul dvs. nu este acceptat

Trebuie să vă actualizați browserul pentru a utiliza site-ul.

Actualizați la cea mai recentă versiune Internet Explorer

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

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
Rezumat
Acest articol arată cum să pună în aplicare pe bază de formulare autentificare folosind o bază acoperire de date pentru a stoca utilizatorilor.

back to the top

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
back to the top

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.
back to the top

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>					
back to the top

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]GOCREATE TABLE [dbo].[Users] (   [uname] [varchar] (15) NOT NULL ,   [Pwd] [varchar] (25) NOT NULL ,   [userRole] [varchar] (25) NOT NULL ,) ON [PRIMARY]GOALTER TABLE [dbo].[Users] WITH NOCHECK ADD    CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED    (      [uname]   )  ON [PRIMARY] GOINSERT 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ă.
back to the top

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.
back to the top

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);					
back to the top

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.
back to the top

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.
back to the top
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: 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: 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ţă: Pentru mai multe informații despre configurație ASP.NET, se referă la următoarele Microsoft .NET Framework Developer's Guide articolele: 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
back to the top

Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 301240 - Ultima examinare: 11/15/2012 03:07:00 - Revizie: 1.0

  • 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
  • kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtro
Feedback
1.microsoft.com/c.gif?DI=4050&did=1&t=">r varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" n.protocol) + "//c.microsoft.com/ms.js'><\/script>");