Šiuo metu esate neprisijungę, laukiama, kol iš naujo prisijungsite prie interneto

Kaip įgyvendinti formomis pagrįstas autentifikavimas ASP.NET taikomojoje programoje naudojant C #.NET

SVARBU: šis straipsnis išverstas naudojant „Microsoft“ mašininio vertimo programinę įrangą ir gali būti pataisytas naudojant „Community Translation Framework“ (CTF) technologiją. „Microsoft“ siūlo mašinos išverstus ir po to bendruomenės suredaguotus straipsnius, taip pat žmogaus išverstus straipsnius siekdama suteikti prieigą prie visų savo žinių bazės straipsnių daugeliu kalbų. Mašinos išverstuose ir vėliau paredaguotuose straipsniuose gali būti žodyno, sintaksės ir / arba gramatikos klaidų. „Microsoft“ neatsako už jokius netikslumus, klaidas arba žalą, patirtą dėl neteisingo turinio vertimo arba mūsų klientų naudojimosi juo. Daugiau apie CTF žr. http://support.microsoft.com/gp/machine-translation-corrections.

Spustelėkite čia, norėdami pamatyti šio straipsnio versiją anglų kalba: 301240
Santrauka
Šis straipsnis parodo, kaip įgyvendinti formas Autentifikavimas naudojant duomenų bazę saugoti vartotojų.

back to the top

Reikalavimai

Šiame sąraše bendrais bruožais rekomenduojama aparatūros, programinės įrangos, tinklo infrastruktūrą, ir pakeitimų paketus, jums reikia:
  • Microsoft Visual Studio .NET
  • Microsoft interneto informacijos paslaugas (IIS) versija 5.0 ar vėliau
  • Microsoft SQL serverio
back to the top

Sukurti naudojant C# .NET ASP.NET programai

  1. Atidaryti Visual Studio .NET.
  2. Kurti naują ASP.NET žiniatinklio programą, ir nurodyti pavadinimą ir vieta.
back to the top

Saugumo nustatymų konfigūravimas Web.config faile

Šis skyrius parodo, kaip pridėti ir modifikuoti, <authentication></authentication> ir <authorization></authorization> konfigūracijos skyrių konfigūruoti ASP.NET taikymo Naudokite formų-based atpažinimo sistemą.
  1. Lange Solution Explorer, atidarykite rinkmeną Web.config.
  2. Pakeisti autentifikavimo režimą formas.
  3. Įterpti žymės <Forms>, ir užpildyti atitinkamą atributai. (Daugiau informacijos apie šių požymių, kreiptis į MSDN dokumentus arba QuickStart dokumentacijoje, kuri yra nurodyta, </Forms>NUORODOS skirsnis.) Kopija, šį kodą, ir spustelėkite Įklijuoti kaip HTML dėl toRedaguoti meniu Įterpti kodą į <authentication></authentication> failo dalyje:
    <authentication mode="Forms">   <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"    protection="All" path="/" timeout="30" /></authentication> 					
  4. Uždrausti priėjimą prie anoniminio vartotojo į į <authorization></authorization> skirsnį taip:
    <authorization>   <deny users ="?" />   <allow users = "*" /></authorization>					
back to the top

Sukurti duomenų bazės lentelės pavyzdį saugoti vartotojų informaciją

Šis skyrius parodo, kaip sukurti duomenų bazę saugoti vartotojo vardą, slaptažodį ir vaidmens vartotojams. Jums reikia stulpelio vaidmuo Jei norite saugoti vartotojų vaidmenis duomenų bazėje ir įgyvendinti Vaidmenimis pagrįstas saugumo.
  1. Dėl to Pradėti meniu, spustelėkitePaleisti, tada įveskite Užrašų knygelė Norėdami atidaryti Bloknoto pabaigoje.
  2. Pažymėkite šį SQL scenarijų kodą, dešiniuoju pelės mygtuku spustelėkite į kodas ir spustelėkite Kopija. Užrašinėje spauskitePasta dėl to Redaguoti meniu Įterpti šiuos kodas:
    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. Įrašykite failą kaip Users.sql.
  4. Microsoft SQL serverio kompiuteryje atidarykite Users.sql Query Analyzer. Iš duomenų bazių sąrašą, spustelėkite barai, ir paleisti scenarijų. Tai sukuria mėginio vartotojams ir užpildo lentelę Barai duomenų bazė turi būti naudojamas su šio pavyzdžio prašymą.
back to the top

Sukurti Logon.aspx puslapį

  1. Pridėti naują žiniatinklio formą pavadintas projektas Logon.aspx.
  2. Atidarykite puslapį Logon.aspx redaktorius ir pereiti į HTML Rodyti.
  3. Nukopijuokite šį kodą, ir naudoti, Įklijuoti kaip HTML parinktį, Redaguoti meniu Įterpti kodą tarp į<form>Žymos: </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" />						
    Ši žiniatinklio forma naudojama prisijungimo forma pateikti vartotojams, kad jie galėtų pateikti savo vartotojo vardą ir slaptažodį prisijungti prie paraiškos.
  4. Į dizaino rodinį ir įrašykite puslapio.
back to the top

Kodas įvykio apdorojimo programą, kad ji patvirtina vartotojo įgaliojimus

Šiame skyriuje pateikiamas kodas, kuris dedamas į kodą-už puslapis (Logon.aspx.cs).
  1. Du kartus spustelėkite Įėjimo Norėdami atidaryti, Logon.aspx.CS failą.
  2. Importuoti reikia vardų sričių kodo atsilieka failą:
    using System.Data.SqlClient;using System.Web.Security;					
  3. Sukurti ValidateUser funkcijos patvirtinti vartotojo kredencialus žiūrėdami į duomenų bazės. (Įsitikinkite, kad jums keisti jungimosi eilutę į jūsų duomenų bazės).
    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. Galite naudoti vieną iš dviejų metodų kurti formas tapatybės nustatymo slapuku ir nukreipti į atitinkamą puslapį cmdLogin_ServerClick atveju, vartotojas. Kodo pavyzdys pateikiamas abiem atvejais. Naudokite vieną iš juos pagal jūsų reikalavimą.
    • Skambinti RedirectFromLoginPage bϋdas automatiškai generuoti formų autentiškumo slapukų ir nukreipti vartotoją į atitinkamą puslapį cmdLogin_ServerClick atveju, jei:
      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);}						
    • Generuoti autentifikavimo bilietą, szyfrować it, sukurti slapukas, įtraukite ją į atsakymą, ir nukreipti vartotoją. Tai suteikia jums daugiau kontroliuoti, kaip sukurti slapuką. Taip pat galite įtraukti pasirinktinį duomenų palei su FormsAuthenticationTicket šiuo atveju.
      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. Įsitikinkite, kad įtraukti šį kodą į InitializeComponent metodas Web dizainerį generuoja kodą:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);					
back to the top

Sukurti Default.aspx puslapį

Šiame skyriuje sukuria bandomąjį puslapį, į kurį vartotojai bus nukreipiami po to, kai jie autentifikuoti. Jei vartotojai peržiūrėti šį puslapį be pirmojo prisijungę prie paraiškos, jie yra nukreipiami į prisijungimo puslapį.
  1. Pervardyti esamą WebForm1.aspx puslapį kaip Default.aspx, ir atidarykite ją redaktorius.
  2. Į HTML rodinį, ir nukopijuokite šį kodą tarp į<form>Žymos: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">						
    Šis mygtukas naudojamas prisijungti prie formų autentifikavimo sesijos.
  3. Į dizaino rodinį ir įrašykite puslapio.
  4. Importuoti reikia vardų sričių kodo atsilieka failą:
    using System.Web.Security;					
  5. Dukart spustelėkite SignOut atviro kodo atsilieka puslapis (Default.aspx.cs), o į šį kodą į cmdSignOut_ServerClick įvykio apdorojimo programa:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e){   FormsAuthentication.SignOut();   Response.Redirect("logon.aspx", true);}					
  6. Įsitikinkite, kad įtraukti šį kodą į InitializeComponent metodas Web dizainerį generuoja kodą:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);					
  7. Įrašyti ir kaupti projekto. Dabar galite naudoti su paraiškos.
back to the top

Papildomos pastabos

  • Jūs galite saugoti slaptažodžius saugiai duomenų bazėje. Jūs pavadintas HashPasswordForStoringInConfigFileFormsAuthentication klasės naudingumo funkciją galite naudoti norėdami šifruoti slaptažodžius prieš juos laikyti duomenų bazėje arba konfigūracijos failą.
  • Galbūt norėsite laikyti SQL ryšio informacija, konfigūracijos failo (Web.config), kad galėtumėte lengvai pakeisti tai jei reikia.
  • Jums gali svarstyti įtraukti kodą, kad piratai, kurie bando naudoti skirtingų derinių slaptažodžių nuo bandančiųjų įeiti. Pavyzdžiui, jūs galite yra logika, kuri priima tik du ar trys įėjimai. Jei vartotojas negali keli bandymai įeiti, galbūt norėsite nustatyti vėliavėlę, duomenų bazės negalima leisti kad vartotojas galėtų įeiti kol vartotojas iš naujo įgalins savo paskyros apsilankę į kitą puslapį arba telefonu jūsų pagalbos linija. Į to, turėtumėte pridėti atitinkamą klaida tvarkymo kur reikia.
  • Kadangi vartotojas yra pagrįstas autentifikavimas slapukas, galbūt norėsite naudoti saugiųjų jungčių lygmens (SSL) šio prašymo taip kad niekas gali apgauti tapatybės nustatymo slapuku ir kitų vertingų informacija, kuri yra perduodama.
  • Formomis pagrįstas autentifikavimas reikalauja, kad jūsų klientas prisiima arba įjungti slapukų savo naršyklėje.
  • Skirtojo laiko parametras, kad <authentication></authentication> konfigūracijos sekcijos kontroliuoja intervalas, kuriame, tapatybės nustatymo Slapukas yra regeneruotos. Pasirinkite vertę, kuri suteikia geresnį efektyvumą ir saugą.
  • Tam tikrų tarpininkavimo proxy ir talpyklos internete gali talpyklos interneto serverio atsakymams, kuriuose yra antraštės Set-Cookie, kurie tuomet grįžo į kitas vartotojas. Nes formomis pagrįstas autentifikavimas naudoja slapuką autentifikuoti vartotojai, tai gali sukelti vartotojams netyčia (arba tyčia) pamėgdžioti kito vartotojo gauti slapuką iš tarpinį serverį tarpininkavimo arba talpyklos, buvo ne iš pradžių buvo skirti jiems.
back to the top
Nuorodos
Daugiau informacijos apie tai, kaip įgyvendinti paprasta formomis pagrįstas autentifikavimas naudoja ir <credentials></credentials> skyriaus laikyti vartotojams ir slaptažodžius, kreiptis į šiuos GotDotNet ASP.NET QuickStart bandinys: Daugiau informacijos apie tai, kaip įgyvendinti formas autentifikavimą, kuris naudoja XML failą vartotojai ir slaptažodžius, perduoti, temoje .NET sistemos programinės įrangos kūrimo rinkinys (SDK) dokumentai:
Formų autentifikavimas naudojant XML vartotojams failą
http://msdn2.Microsoft.com/en-us/library/1b1y85bh (vs.71) .aspx
Daugiau informacijos apie ASP.NET Web application saugumas, kreiptis į šių Microsoft .NET sistemoje programuotojo vadovas dokumentai: Daugiau informacijos apie System.Web.Security vardų, nurodyti šių Microsoft .NET Framework Pagrindiniuose dokumentuose: Daugiau informacijos apie ASP.NET konfigūracijos, kad šių Microsoft .NET sistemoje programuotojo vadovas straipsniai: Informacijos apie ASP.NET saugumo gairių, šiuos MSDN Baltojoje knygoje:
Autentifikavimo, ASP.NET: .NET saugos klausimais
http://msdn2.Microsoft.com/en-us/library/ms978378.aspx
back to the top

Įspėjimas: šis straipsnis išverstas automatiškai

Savybės

Straipsnio ID: 301240 – Paskutinė peržiūra: 06/07/2013 02:21:00 – Peržiūra: 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 KbMtlt
Atsiliepimai