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

Souhrn

Tento článek ukazuje, jak implementovat ověřování na základě formulářů 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
  • Internetová informační služba (IIS) verze 5.0 nebo novější
  • Microsoft SQL Server

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

  1. Otevřete aplikaci Visual Studio .NET.
  2. Vytvořit nové ASP.NET webové aplikace 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 < ověřování > a < authorization > konfigurační oddíly konfigurace aplikace ASP.NET pro použití ověřování na základě formulářů.
  1. V Průzkumníku ř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 v dokumentaci MSDN nebo QuickStart dokumentaci, která je uvedena v
    Sekce odkazy .) Zkopírujte následující kód a potom klepněte na příkaz Vložit jako HTML v
    Nabídce Úpravy vložte kód v části < ověřování > souboru:
    <authentication mode="Forms">   <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    protection="All" path="/" timeout="30" />
    </authentication>

  4. Odepřete přístup anonymního uživatele v oddílu < authorization > takto:
    <authorization>   <deny users ="?" />
    <allow users = "*" />
    </authorization>

Vytvořit ukázkovou tabulku databáze k ukládání podrobnosti uživatele

Tento oddíl ukazuje, jak vytvořit ukázkové databáze uložit uživatelské jméno, heslo a role pro uživatele. Je nutné sloupec role Pokud chcete ukládat uživatelské role v databázi a implementovat zabezpečení založené na rolích.
  1. V nabídce Start klepněte na tlačítko
    Spustita potom zadejte Poznámkový blok otevřete 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 příkaz Kopírovat. V programu Poznámkový blok klepněte na tlačítko
    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 otevřete v aplikaci Query Analyzer Users.sql. Ze seznamu databází klepněte na tlačítko pubsa spusťte skript. To vytvoří tabulku vzorku uživatelů a naplní tabulky v databázi Pubs s Tato vzorová aplikace.

Vytvořit na stránce Logon.aspx

  1. Přidáte nový webový formulář do projektu s názvem Logon.aspx.
  2. V editoru otevřete stránku Logon.aspx a přepnout do zobrazení HTML.
  3. Zkopírujte následující kód a použít možnost Vložit jako HTML v nabídce Úpravy vložte kód mezi značky < 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, aby poskytují své uživatelské jméno a heslo pro přihlášení do aplikace.
  4. Přepnout 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 kódu stránky (Logon.aspx.cs).
  1. Poklepejte na položku přihlášení otevřete soubor Logon.aspx.cs.
  2. Importujte 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, že změnit řetězec připojení přejděte na databázi).
    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. 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šné stránce v události cmdLogin_ServerClick . Ukázkový kód je k dispozici pro oba scénáře. Použijte jeden z nich podle vašeho požadavku.
    • Zavolejte metodu RedirectFromLoginPage k automatickému generování formulářů ověřovací soubor cookie 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řit soubor cookie, přidat do odpovědi a přesměrovat uživatele. To vám dává větší kontrolu při vytváření souboru cookie. Můžete také zahrnout vlastní data spolu 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 metoda 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ří testovací stránku, na kterou jsou uživatelé přesměrováni po jejich ověření. Jestliže uživatelé procházejí na tuto stránku bez první přihlášení k aplikaci, je přesměrován 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 značky < form >:
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    Toto tlačítko slouží k odhlášení relace ověřování formulářů.
  3. Přepnout do návrhového zobrazení a stránku uložte.
  4. Importujte požadované obory názvů v souboru kódu na pozadí:
    using System.Web.Security;
  5. Poklepejte na položku SignOut otevřete stránku kódu (Default.aspx.cs) a zkopírujte 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 metoda 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. Můžete použít funkci 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 konfiguračním souboru (Web.config) tak, aby jste jej v případě potřeby snadno změnit.
  • Můžete zvážit přidání kódu zabránit hackerům, kteří se pokusí pomocí různých kombinací hesla přihlásit. Můžete například zahrnout logiku, která přijímá pouze dva nebo tři pokusy o přihlášení. Uživatel nemůže počet pokusů o přihlášení, můžete nastavit příznak databáze nedovolí uživateli přihlásit, dokud uživatel znovu povolí svůj účet jiné stránce nebo voláním odbornou pomoc. Kromě toho měli byste přidat příslušné chyby zpracování kdykoli je to nutné.
  • Vzhledem k tomu, že uživatel je určen podle ověřovacího souboru cookie, můžete použít protokol SSL (Secure Sockets Layer) (SSL) pro tuto aplikaci tak, aby nikdo může uvádět v omyl, ověřovací soubor cookie a další důležité 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 oddílu < ověřování > konfigurace určuje interval, kdy ověřovací soubor cookie je vygenerován. Můžete zvolit hodnotu, která poskytuje lepší výkon a zabezpečení.
  • Některých zprostředkujících serverů proxy a mezipaměti v síti Internet může ukládat do mezipaměti webové odezvy serveru, které obsahují záhlaví Set-Cookie, které jsou vráceny 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 cache, která nebyla původně určena pro ně.

Odkazy

Další informace o implementaci jednoduchého ověřování pomocí formulářů, která používá < pověření > oddíl pro ukládání uživatelé a hesla naleznete v následujících GotDotNet ASP.NET QuickStart vzorku:Další informace o tom, jak implementovat založené na formulářích ověřování, který používá soubor XML pro ukládání uživatelé a hesla naleznete v dokumentaci k rozhraní.NET Framework Software Development Kit (SDK) v následujícím tématu:
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 následujících Microsoft rozhraní.NET Framework Developer's Guide dokumentace:Další informace o oboru názvů System.Web.Security naleznete v následující dokumentaci Microsoft rozhraní.NET Framework:Další informace o konfiguraci technologie ASP.NET naleznete následujících Microsoft rozhraní.NET Framework Developer's Guide články:Informace o obecných zásadách zabezpečení technologie ASP.NET naleznete následující dokument white paper MSDN:
Ověřování v technologii ASP.NET: pokyny k zabezpečení .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
Vlastnosti

ID článku: 301240 - Poslední kontrola: 19. 1. 2017 - Revize: 2

Váš názor