Jak implementovat ověřování na základě formulářů ve vaší aplikaci technologie ASP.NET pomocí jazyka Visual Basic .NET

Překlady článku Překlady článku
ID článku: 308157 - 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 uživatelů ukládat.

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
  • Microsoft SQL Server
  • Internetová informační služba (IIS) verze 5.0 nebo vyšší

Vytvořte aplikaci technologie ASP.NET pomocí aplikace Visual Basic .NET

  1. Otevřete aplikaci Visual Studio .NET.
  2. Vytvořit novou webovou aplikaci 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 technologie ASP.NET Použijte ověřování založené na formulářích.
  1. V Průzkumníku řešení otevřete soubor Web.config.
  2. Změňte režim ověřování formulářů.
  3. Vložení značky <Forms>a vyplňte 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 vložte kód v nabídce Úpravy klepněte na příkaz Vložit jako HTML<authentication></authentication> souboru:
    <authentication mode="Forms">
    	<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    	protection="All" path="/" timeout="30" />
    </authentication>
    					
  4. Odepřít přístup pro anonymního uživatele v <authorization></authorization> části takto:
    <authorization>
    	<deny users ="?" />
    	<allow users = "*" />
    </authorization>
    					

Vytvoření databázové tabulky vzorek uložit podrobnosti 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 z databáze a implementace založené na rolích zabezpečení.
  1. Z nabídky Start systému Windows klepněte na příkaz Spustita zadejte Program Poznámkový blok Chcete-li otevřít Program Poznámkový blok.
  2. Následující kód skriptu SQL pro zvýraznění, klepněte pravým tlačítkem myši kód a potom klepněte na příkaz Kopírovat. V programu Poznámkový blok klepněte na příkaz Vložit v nabídce Úpravy , vložte 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 pubsa spusťte skript. To vytvoří tabulku vzorku uživatelů a naplní tabulku v databázi Pubs pro použití s Tato ukázka aplikace.

Vytvořit stránku Logon.aspx

  1. Přidat nový webový formulář s názvem projektu Logon.aspx.
  2. V editoru otevřete stránku Logon.aspx a přepnout do formátu HTML zobrazení.
  3. Následující kód zkopírujte a vložte kód mezi pomocí možnosti Vložit jako HTML v nabídce Úpravy<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í k aplikaci.
  4. Přepněte do návrhového zobrazení a stránku uložte.

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

Tato část představuje kód, který je umístěn v kódu stránka (Logon.aspx.vb).
  1. Otevřete soubor Logon.aspx.vb.
  2. Importujte požadované obory názvů v souboru kódu na pozadí:
    Imports System.Data.SqlClient
    Imports System.Web.Security
    					
  3. Vytvořte funkci ValidateUser k ověření pověření uživatele zobrazením databáze. (Ujistěte se, že změnit řetězec připojení přejděte do databáze.)
    Private Function ValidateUser(ByVal userName As String, ByVal passWord As String) As Boolean
            Dim conn As SqlConnection
            Dim cmd As SqlCommand
            Dim lookupPassword As String
    
            lookupPassword = Nothing
    
            ' Check for an invalid userName.
            ' userName  must not be set to nothing and must be between one and 15 characters.
            If ((userName Is Nothing)) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.")
                Return False
            End If
            If ((userName.Length = 0) Or (userName.Length > 15)) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.")
                Return False
            End If
    
            ' Check for invalid passWord.
            ' passWord must not be set to nothing and must be between one and 25 characters.
            If (passWord Is Nothing) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.")
                Return False
            End If
            If ((passWord.Length = 0) Or (passWord.Length > 25)) Then
                System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.")
                Return False
            End If
    
            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 the users table given a 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 = cmd.ExecuteScalar()
    
                ' Cleanup command and connection objects.
                cmd.Dispose()
                conn.Dispose()
            Catch ex As Exception
                ' 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)
            End Try
    
            ' If no password found, return false.
            If (lookupPassword Is Nothing) Then
                ' You could write failed login attempts here to the event log for additional security.
                Return False
            End If
    
            ' Compare lookupPassword and input passWord by using a case-sensitive comparison.
            Return (String.Compare(lookupPassword, passWord, False) = 0)
    
    End Function
    					
  4. Můžete použít jednu ze dvou metod pro generování formulářů ověřovací soubor cookie a přesměrovat uživatele na příslušnou stránku v případě cmdLogin_ServerClick . Ukázkový kód je k dispozici pro obě varianty. Použijte jeden z je podle vašeho požadavku.
    • Zavolejte metodu RedirectFromLoginPage automaticky generovat soubor cookie ověřování formulářů a přesměrujte uživatele na příslušné stránce v události cmdLogin_ServerClick :
      Private Sub cmdLogin_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) _
         Handles cmdLogin.ServerClick
         If ValidateUser(txtUserName.Value,txtUserPass.value) Then
            FormsAuthentication.RedirectFromLoginPage(txtUserName.Value, _
            chkPersistCookie.Checked)
         Else
            Response.Redirect("logon.aspx", True)
         End If
      End Sub
      						
    • Generovat ověřovací lístek, šifrováním, vytvoření soubor cookie odpověď doplnit a přesměrujte uživatele. To vám dává více kontroluje, jak vytvořit soubor cookie. Můžete také zahrnout vlastní data podél s FormsAuthenticationTicket v tomto případě.
      Private Sub cmdLogin_ServerClick(ByVal sender As Object, _
         ByVal e As System.EventArgs) Handles cmdLogin.ServerClick
         If Validateuser(txtUserName.Value,txtUserPass.Value) Then
            Dim tkt As FormsAuthenticationTicket
            Dim cookiestr As String
            Dim ck As HttpCookie
      
            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) then ck.Expires=tkt.Expiration 
            ck.Path = FormsAuthentication.FormsCookiePath() 
            Response.Cookies.Add(ck)
      
            Dim strRedirect As String
            strRedirect = Request("ReturnURL")
            If strRedirect <> "" Then
               Response.Redirect(strRedirect, True)
            Else
               strRedirect = "default.aspx"
               Response.Redirect(strRedirect, True)
            End If
         Else
            Response.Redirect("logon.aspx", True)
         End If
      End Sub
      						

Vytvoření stránky Default.aspx

V této části vytvoří testovací stránku, na kterou jsou uživatelé přesměrováni po jejich ověření. Pokud uživatelé na tuto stránku přejít bez první přihlášení na žádost 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. Importujte požadované obory názvů v souboru kódu na pozadí:
    Imports System.Web.Security
    					
  5. Otevřít kódem na pozadí stránky (Default.aspx.vb) a kopírování Následující kód v obslužné rutině události cmdSignOut_ServerClick :
    Private Sub cmdSignOut_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles cmdSignOut.ServerClick
       FormsAuthentication.SignOut()
       Response.Redirect("logon.aspx", True)
    End Sub
    					
  6. Uložte a zkompilujte projekt. Nyní můžete použít aplikace.

Poradce při potížích

  • Je vhodné k bezpečnému ukládání hesel v databázi. Je pomocí funkce ověřování pomocí formulářů třída nástroj s názvem HashPasswordForStoringInConfigFile zašifrování hesla předtím, než jsou uloženy v databázi nebo konfigurační soubor.
  • Chcete uložit informace o připojení SQL v Konfigurace souboru (Web.config), takže můžete snadno změnit jej, pokud nezbytné.
  • Můžete zvážit přidání kódu pro hackery, kteří se pokusí zabránit pomocí různých kombinací hesla přihlásit. Například je možné zahrnout logiku, která přijímá pouze dva nebo tři pokusy o přihlášení. Pokud uživatel nemůže počet pokusů o přihlášení, můžete nastavit příznak databáze není umožnit uživateli přihlásit, dokud uživatel znovu povolí svůj účet jiné stránce nebo voláním odbornou pomoc. V toho, měli byste přidat příslušné chyby zpracování kdykoli nezbytné.
  • Vzhledem k tomu, že uživatel je identifikován na základě ověření soubor cookie, můžete použít protokol SSL (Secure Sockets Layer) (SSL) pro tuto aplikaci tak zda můžete načíst soubor cookie ověřování a další cenné informace, která byla přenesena.
  • Ověřování na základě formulářů vyžaduje, aby klient přijmout nebo povolit soubory cookie v prohlížeči.
  • Parametr časového limitu<authentication></authentication> oddíl konfigurace určuje interval, kdy ověřovací soubor cookie je vygenerován. Můžete zvolit hodnotu, která obsahuje vyššího výkonu a zabezpečení.
  • Některých zprostředkujících serverů proxy a mezipaměti na Internetu může Mezipaměť webového serveru odpovědi Set-Cookie záhlaví, které jsou pak vrátil se na jiného uživatele. Vzhledem k tomu, že ověřování na základě formulářů používá soubor cookie k ověřování uživatelů, to může způsobit 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

Informace o implementaci jednoduché, založené na formulářích ověřování pomocí <credentials></credentials> oddíl pro ukládání uživatelé a hesla, naleznete v následujícím článku v ASP.NET QuickStart vzorky:
Ověřování založené na formulářích
http://quickstarts.ASP.NET/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Informace o implementaci ověřování založené na formulářích ukládání uživatelů a hesel, pomocí souboru Extensible Markup Language (XML) naleznete v následujícím tématu 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í webové aplikace ASP.NET naleznete v tématu v dokumentaci k rozhraní.NET Framework SDK v následujícím článku:
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ím článku v sadě SDK pro rozhraní.NET Framework dokumentace:
http://msdn2.microsoft.com/en-us/library/System.Web.Security (vs.71) .aspx
Další informace o konfiguraci technologie ASP.NET naleznete v tématu Následující články rozhraní.NET Framework SDK:
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 zabezpečení technologie ASP.NET naleznete v následujících tématech Dokument MSDN:
Ověřování v technologii ASP.NET: .NET Security Guidance
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
Další informace naleznete v následujících publikacích:
Esposito, Dino. Vytváření webových řešení pomocí prostředí ASP.NET a ADO.NET. Nakladatelství Microsoft Press, 2001.

Howard a David LeBlanc a Michael. Psaní bezpečného kódu. Nakladatelství Microsoft Press, 2001.

Vlastnosti

ID článku: 308157 - Poslední aktualizace: 28. června 2013 - Revize: 9.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Klíčová slova: 
kbproductlink kbconfig kbhowtomaster kbsecurity kbweb kbmt KB308157 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 308157

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