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

Straipsni? vertimai Straipsni? vertimai
Straipsnio ID: 301240 - Per?i?r?ti ?iame straipsnyje minimus produktus.
I?pl?sti visus | Sutraukti visus

?iame puslapyje

Santrauka

?is straipsnis parodo, kaip ?gyvendinti formas Autentifikavimas naudojant duomen? baz? saugoti vartotoj?.

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

Sukurti naudojant C# .NET ASP.NET programai

  1. Atidaryti Visual Studio .NET.
  2. Kurti nauj? ASP.NET ?iniatinklio program?, ir nurodyti pavadinim? ir vieta.

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>
    					

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]
    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. ?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?.

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.

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);
    					

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.

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.

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:
Formomis pagr?stas autentifikavimas
http://quickstarts.ASP.net/QuickStartv20/aspnet/DOC/Security/formsauth.aspx
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:
ASP.NET Web Application saugumas
http://msdn2.Microsoft.com/en-us/library/330a99hc (vs.71) .aspx
Daugiau informacijos apie System.Web.Security vard?, nurodyti ?i? Microsoft .NET Framework Pagrindiniuose dokumentuose:
System.Web.Security Namespace
http://msdn2.Microsoft.com/en-us/library/System.Web.Security (vs.71) .aspx
Daugiau informacijos apie ASP.NET konfig?racijos, kad ?i? Microsoft .NET sistemoje programuotojo vadovas straipsniai:
ASP.NET konfig?racijos
http://msdn2.Microsoft.com/en-us/library/aa719558 (VS.71) .aspx

ASP.NET konfig?racijos skyriai
http://msdn2.Microsoft.com/en-us/library/w7w4sb0w (vs.71) .aspx
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

Savyb?s

Straipsnio ID: 301240 - Paskutin? per?i?ra: 2013 m. bir?elio 7 d. - Per?i?ra: 1.0
Taikoma:
  • 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
Rakta?od?iai: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtlt
Atliktas automatinis vertimas
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

Pateikti atsiliepim?

 

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