Jak implementovat ověřování pomocí formulářů v aplikaci technologie ASP.NET pomocí C #.NET

Překlady článku Překlady článku
ID článku: 301240 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek ukazuje, jak implementovat, založené na formulářích ověřování pomocí databáze k ukládání uživatelů.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack, které potřebujete:
  • Microsoft Visual Studio .NET
  • Internetová informační služba (IIS) verze 5.0 nebo novější
  • Microsoft SQL Server

Vytvořte aplikaci technologie ASP.NET pomocí jazyka C# .NET

  1. Spusťte aplikaci Visual Studio .NET.
  2. Vytvořit novou aplikaci technologie ASP.NET a zadejte název a umístění.

Konfigurace nastavení zabezpečení v souboru Web.config

Tento oddíl ukazuje, jak přidat a upravit <authentication></authentication> a <authorization></authorization> konfigurační oddíly konfigurace aplikace ASP.NET používejte ověřování založené na formulářích.
  1. V okně Průzkumník řešení otevřete soubor Web.config.
  2. Změňte režim ověřování formulářů.
  3. Vložit značku <Forms>a vyplnit příslušné atributy. (Další informace o těchto atributech naleznete webu MSDN dokumentace nebo dokumentace QuickStart, který je uveden v </Forms>ODKAZY oddíl.) Kopírovat Následující kód a potom klepněte na tlačítko Vložit jako HTML vÚpravy v nabídce Vložit kód v <authentication></authentication> souboru:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. Odepřít přístup anonymního uživatele v <authorization></authorization> části takto:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Vytvoření databázové tabulky vzorku na podrobnosti o úložišti uživatele

Tento oddíl ukazuje, jak vytvořit ukázkové databáze uložte uživatelské jméno, heslo a role pro uživatele. Potřebujete-li sloupec role Pokud chcete ukládat uživatelské role v databázi a implementovat založené na rolích zabezpečení.
  1. V Start nabídky, klepněte na tlačítkoSpustita potom zadejte Program Poznámkový blok Chcete-li otevřít Program Poznámkový blok.
  2. Zvýrazněte následující kód skriptu SQL, klepněte pravým tlačítkem myši kód a potom klepněte na tlačítko Kopie. V programu Poznámkový blok klepněte na tlačítkoVložit v Úpravy v nabídce Vložit následující kód:
    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. Uložte soubor jako Users.sql.
  4. V počítači Microsoft SQL Server spusťte Users.sql v Query Analyzer. Ze seznamu databází klepněte na tlačítko pubs, a Spusťte skript. To vytvoří ukázkovou tabulku uživatelů a naplní tabulky v databáze Pubs pro použití s Tato vzorová aplikace.

Vytvořte stránku Logon.aspx

  1. Přidat nový webový formulář do projektu s názvem Logon.aspx.
  2. Otevřete stránku Logon.aspx v editoru a přepnout do formátu HTML zobrazení.
  3. Zkopírujte následující kód a použít Vložit jako HTML Možnosti na Úpravy v nabídce Vložit kód mezi<form>tagy: </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" />
    						
    Tento webový formulář se používá k prezentaci přihlašovací formulář uživatelům, takže mohou Zadejte své uživatelské jméno a heslo pro přihlášení do aplikace.
  4. Přepněte do návrhového zobrazení a stránku uložte.

Kód obslužné rutiny události tak, aby se ověřuje pověření uživatele

Tato část obsahuje kód, který je umístěn v s kódem stránka (Logon.aspx.cs).
  1. Poklepejte na položku Přihlášení Chcete-li otevřít Soubor Logon.aspx.cs.
  2. Import požadované obory názvů v souboru kódu na pozadí:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Vytvořte funkci ValidateUser k ověření pověření uživatele podíváním se do databáze. (Ujistěte se, změnit připojovací řetězec tak, aby odkazovaly do databáze).
    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. Použijte jednu ze dvou metod ke generování formulářů ověřovací soubor cookie a přesměrovat uživatele na příslušné stránce v události cmdLogin_ServerClick . Ukázkový kód je k dispozici pro obě varianty. Použijte některou z je podle vašich požadavků.
    • Volejte metodu RedirectFromLoginPage pro automatické vygenerování souboru cookie ověřování formulářů a přesměrovat uživatele na příslušné stránce v události 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);
      }
      						
    • Generovat ověřovací lístek, šifrováním, vytvoření soubor cookie, přidejte do odpovědi a přesměrovat uživatele. To vám dává více jak vytvořit soubor cookie ovládacího prvku. Může také obsahovat vlastní data podél s FormsAuthenticationTicket v tomto případě.
      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. Ujistěte se, že následující kód je přidán do InitializeComponent metodu v kódu, který generuje formulář Návrhář webu:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Vytvoření stránky Default.aspx

V této části vytvoří zkušební stránku, na kterou jsou uživatelé přesměrováni po jejich ověření. Pokud uživatelé procházejí na tuto stránku bez první přihlášení k žádosti jsou přesměrováni na přihlašovací stránku.
  1. Přejmenovat existující stránku WebForm1.aspx jako Default.aspx, a Otevřete v editoru.
  2. Přepněte do zobrazení HTML a zkopírujte následující kód mezi na<form>tagy: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Toto tlačítko slouží k odhlášení ověřování formulářů relace.
  3. Přepněte do návrhového zobrazení a stránku uložte.
  4. Import požadované obory názvů v souboru kódu na pozadí:
    using System.Web.Security;
    					
  5. Poklepejte na SignOut stránku otevřít s kódem (Default.aspx.cs) a kopie Následující kód v obslužné rutině události cmdSignOut_ServerClick :
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Ujistěte se, že následující kód je přidán do InitializeComponent metodu v kódu, který generuje formulář Návrhář webu:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Uložte a zkompilujte projekt. Nyní můžete použít aplikace.

Další poznámky

  • Je vhodné k bezpečnému ukládání hesel v databázi. Je můžete použít funkci ověřování pomocí formulářů třídy nástroj s názvem HashPasswordForStoringInConfigFile k zašifrování hesla předtím, než je uložena v databázi nebo konfigurační soubor.
  • Můžete chtít ukládat informace o připojení SQL v Konfigurace souboru (Web.config), takže můžete snadno změnit, pokud nezbytné.
  • Můžete zvážit přidání kódu k zabránění hackerům, kteří se pokoušejí pomocí různých kombinací hesla přihlásit. Mohou například zahrnout logiku, která přijímá pouze dva nebo tři pokusy o přihlášení. V případě, že uživatel nemůže počet pokusů o přihlášení, může být vhodné nastavit příznak databáze tak, aby tento uživatel přihlásit, dokud uživatel neobnoví svůj účet vyvoláním vaši linku podpory nebo jiné stránce. V sčítání, měli byste přidat příslušnou chybovou zpracování kdekoli nezbytné.
  • Protože uživatel je určen založené na ověřování soubor cookie, může být vhodné použít protokol SSL (Secure Sockets Layer) (SSL) pro tuto aplikaci tak, aby že nikdo opatřovat ověřovací soubor cookie a jiný význam informace, která byla přenesena.
  • Ověřování na základě formulářů vyžaduje, aby klient přijmout nebo povolit soubory cookie ve svém prohlížeči.
  • Parametr časového limitu<authentication></authentication> oddíl konfigurace určuje interval, kdy ověřovací soubor cookie je vygenerován nový. Můžete zvolit hodnotu, která obsahuje lepšího výkonu a zabezpečení.
  • Některé zprostředkujících serverů proxy a mezipaměti v síti Internet může Mezipaměť webového serveru jsou odpovědi záhlaví Set-Cookie, které jsou pak vrácena na jiného uživatele. Protože ověřování na základě formulářů používá soubor cookie k ověřování uživatelů, to může způsobit, že uživatelům neúmyslně (nebo záměrně) vydávat za jiného uživatele obdrží soubor cookie z zprostředkující server proxy nebo mezipaměť, která nebyla původně určena pro ně.

Odkazy

Další informace o tom, jak implementovat jednoduché ověřování založené na formulářích, která používá <credentials></credentials> oddíl pro ukládání uživatelé a hesla, naleznete v následujících GotDotNet ASP.NET QuickStart vzorku:
Ověřování založené na formulářích
http://quickstarts.ASP.NET/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Další informace o tom, jak implementovat, založené na formulářích ověřování, který používá soubor XML k uložení uživatelé a hesla, naleznete Následující téma v rozhraní.NET Framework Software Development Kit (SDK) dokumentace:
Ověřování pomocí formulářů pomocí souboru XML uživatelům
http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71) .aspx
Další informace o zabezpečení aplikací technologie ASP.NET, naleznete následujících Microsoft rozhraní.NET Framework Developer's Guide dokumentace:
Zabezpečení webové aplikace ASP.NET
http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71) .aspx
Další informace o oboru názvů System.Web.Security naleznete v následujících Microsoft rozhraní.NET Framework Referenční dokumentace:
Obor názvů System.Web.Security
http://msdn2.microsoft.com/en-us/library/System.Web.Security (vs.71) .aspx
Další informace o konfiguraci technologie ASP.NET naleznete Následující články Microsoft rozhraní.NET Framework Developer's Guide:
Konfigurace technologie ASP.NET
http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71) .aspx

Oddíly konfigurace technologie ASP.NET
http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71) .aspx
Informace o obecných zásadách zabezpečení technologie ASP.NET dokument white paper MSDN:
Ověřování v technologii ASP.NET: pokyny pro zabezpečení rozhraní .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx

Vlastnosti

ID článku: 301240 - Poslední aktualizace: 27. ledna 2013 - Revize: 13.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku: 301240

Dejte nám zpětnou vazbu

 

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