Kuidas rakendada vormipõhise autentimise ASP.net-i rakendused, C# .net-i abil

Selle artikli Microsoft Visual Basic .net-i jaoks leiate artiklinumbriga
308157 .

Artiklis käsitletakse järgmisi Microsoft .NET raamistiku rühma teegi nimeruumid:
  • System.Data.SqlClient
  • System.Web.Security

SELLES ÜLESANDES

Kokkuvõte

See artikkel näitab, kuidas rakendada vormipõhine autentimine, kasutades andmebaasi kasutajad säilitada.

Nõuded

Järgmises loendis kirjeldatakse soovituslik riistvara, tarkvara, võrgutaristu ja hoolduspaketid, mida vajate:
  • Microsoft Visual Studio .NET
  • Microsoft Internet Information Services (IIS) 5.0 või uuemat versiooni
  • Microsoft SQL Server

Kasutades C# .NET ASP.net-i rakenduse loomine

  1. Avage Visual Studio .NET.
  2. Looge uus ASP.net-i veebirakenduse ja määrake nimi ja asukoht.

Faili Web.config turvasätete konfigureerimine

See jaotis näitab, kuidas lisada ja muuta < autentimise > ja < luba > konfiguratsiooni jaotistes ASP.net-i rakendused kasutada vormipõhise autentimise konfigureerimiseks.
  1. Avage lahenduste Explorer faili Web.config.
  2. Muutke vormidega.
  3. Sisestage silt < vormid > ja sisestage sobiv atribuudid. (Nende atribuutide kohta lisateabe saamiseks vaadake MSDN-i dokumentatsioonist või Kiirhäälestus dokumentatsiooni, mis on toodud selle
    Jaotisest Viited .) Kopeerige järgmine kood ja seejärel klõpsake Kleebi HTML-vormingus ning
    Redigeeri käsku Kleebi kood < autentimise > jaotises faili:
    <authentication mode="Forms">   <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    protection="All" path="/" timeout="30" />
    </authentication>

  4. Keelata juurdepääsu Anonüümne kasutaja < luba > jaotises järgmiselt:
    <authorization>   <deny users ="?" />
    <allow users = "*" />
    </authorization>

Kasutajate andmed säilitada proovi andmebaasi tabeli loomine

See jaotis näitab, kuidas luua proovi andmebaasi salvestada kasutaja nimi, parool ja kasutaja roll. Peate rolli veerus, kui soovite salvestada andmebaasi kasutaja rollid ja rakendada Rollipõhine turvalisuse.
  1. Klõpsake menüü Start
    Käivitaja seejärel tippige Notepadi avada Notepad.
  2. Esile järgmine SQL-i skripti koodi, paremklõpsake kood ja seejärel klõpsake käsku Kopeeri. Klõpsake Notepadis menüü
    Kleebi menüüs Redigeeri kleepige järgnev kood:
    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. Salvestage fail nimega Users.sql.
  4. Avage arvutis Microsoft SQL Server Query Analyzer Users.sql. Andmebaaside loendit, klõpsake pubidja käivitage skript. See loob kasutajate näidistabelit ja asustab selle Näidisrakendus koos pubid andmebaasi tabelisse.

Logon.aspx lehe loomine

  1. Lisage uus veebivormi projekti nimega Logon.aspx.
  2. Avage Logon.aspx lehe toimetaja ja HTML-i saate aktiveerida.
  3. Kopeerige järgmine kood ja sisestage kood < form >-siltide vaheline menüü redigeerimine suvand Kleebi HTML-vormingus abil:
    <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" />

    Selle veebivormi abil pakkuda kasutajatele sisselogimise vormi, et tagada oma kasutajanime ja parooliga sisse logida rakenduse.
  4. Aktiveerige kujundusvaade ja salvestage leht.

Sündmuseohjuri koodi nii, et see kinnitab kasutaja mandaate

Selles jaotises esitatud koodi, mis pannakse koodiga lehekülje (Logon.aspx.cs).
  1. Topeltklõpsake sisselogimise Logon.aspx.cs faili avada.
  2. Vajalik nimeruumid koodiga faili importimine
    using System.Data.SqlClient;using System.Web.Security;

  3. Looge ValidateUser funktsiooni kontrollida kasutaja mandaate, vaadates andmebaasis. (Veenduge, et muudate ühendusstring käsk teie andmebaasi).
    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. Ühel viisil kahest saate luua vormide autentimine küpsise ja vastava lehe cmdLogin_ServerClick juhul, kui kasutaja suunatakse. Näidiskood on mõlemal juhul ette nähtud. Ühega neist vastavalt oma nõuet.
    • Helistage RedirectFromLoginPage meetod automaatselt luua vormide autentimine küpsise ja suunata vastavat lehele cmdLogin_ServerClick juhul, kui kasutaja:
      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);
      }

    • Luua autentimise piletit, dekrüptida, luua küpsis, lisage see vastus ja suunake kasutaja. See annab teile suurema kontrolli küpsise loomisel. Kohandatud andmed koos FormsAuthenticationTicket võib sisaldada ka sel juhul.
      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. Veenduge, et InitializeComponent meetod koodi, mis loob Web Form Designer lisatakse järgmine kood:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);

Default.aspx lehe loomine

Selles jaotises loob testlehe, mille kasutajad suunatakse pärast seda, kui nad autentimiseks. Kui kasutajad sirvida sellele lehele ilma esimesel sisselogimisel rakenduse, suunatakse nad sisselogimise lehel.
  1. Nimetage ümber olemasoleva WebForm1.aspx lehe Default.aspx ja avage see toimetaja.
  2. HTML-i saate aktiveerida ja kopeerige järgmine kood < form > Sildid vahel:
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    Seda nuppu kasutatakse vormide autentimine seanss välja logida.
  3. Aktiveerige kujundusvaade ja salvestage leht.
  4. Vajalik nimeruumid koodiga faili importimine
    using System.Web.Security;
  5. Topeltklõpsake SignOut koodiga veebilehe (Default.aspx.cs) ja kopeerige järgmine kood cmdSignOut_ServerClick sündmuseohjuri:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e){
    FormsAuthentication.SignOut();
    Response.Redirect("logon.aspx", true);
    }

  6. Veenduge, et InitializeComponent meetod koodi, mis loob Web Form Designer lisatakse järgmine kood:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
  7. Salvestage ja projekti koostamine. Nüüd saate rakenduse.

Täiendavad märkused

  • Kui soovite andmebaasi paroole turvaliselt hoida. Saate paroolide krüptimiseks enne, kui salvestate need andmebaasi või konfiguratsiooni faili FormsAuthentication klassi kasuliku funktsiooni nimega HashPasswordForStoringInConfigFile .
  • Võite salvestada teavet SQL connection konfiguratsioonifaili (Web.config), et saate hõlpsalt muuta seda vajaduse korral.
  • Võite soovi korral lisada koodi häkkerite, kes proovida kasutada sisselogimise paroolid erinevaid kombinatsioone. Näiteks võib sisaldada loogikat, mis aktsepteerib ainult kaks või kolm nurjunud sisselogimiskatsed. Kui kasutaja ei saa logida katsete arv, võite seada lipu andmebaasis ei luba kasutaja sisse logida, kuni kasutaja võimaldab uuesti oma konto teist lehte külastades või helistades toe rida. Lisaks peaksite lisama vastava tõrketöötlus vajaduse korral.
  • Kuna kasutaja tuvastatakse põhinev autentimine küpsise, võite kasutada turvalise soklikihi (SSL) selle taotluse kohta, et keegi võib petta autentimine küpsise ja muud väärtuslikku teavet, mis on edastatud.
  • Vormipõhine autentimine nõuab, et teie kliendi vastu või oma brauseri küpsised.
  • < Autentimise > sektsioonis ajalõpu parameeter kontrollib intervalli, kus autentimine küpsise uuesti. Saate valida väärtuse, mis annab suurema jõudluse ja turvalisuse.
  • Teatud vahendaja puhvrite ja vahemälud Internetis võib vahemälu Web server vastuseid, mis sisaldavad komplekt-küpsise päised, mis tagastatakse seejärel mõne teise kasutaja. Kuna vormipõhise autentimise kasutab küpsiseid kasutajate autentimiseks, võib see põhjustada kogemata (või tahtlikult) jäljendada teisele kasutajale küpsis vastuvõtmine vahendaja proxy või cache, mis oli algselt mõeldud neile kasutajatele.

Viited

Rakendada lihtsustatud vormipõhise autentimise kasutab < mandaat > jaotises kasutajate haldus ja paroolide kohta lisateabe saamiseks vaadake järgmist GotDotNet ASP.net-i Kiirhäälestus näite:Rakendada vormipõhise autentimise, mis kasutab XML-faili, et salvestada kasutajate ja paroolide kohta lisateabe saamiseks vaadake järgmist teemat .NET Frameworki Software Development Kit (SDK) dokumentatsioonis:
Vormide autentimine kasutajad XML-faili kasutamine
http://msdn2.microsoft.com/en-us/library/1b1y85bh(vs.71).aspx
ASP.net-i veebirakenduse turvalisuse kohta lisateabe saamiseks vaadake järgmist Microsoft .NET Framework Developer's Guide dokumentatsioon:Nimeruumi System.Web.Security kohta lisateabe saamiseks vaadake järgmist Microsoft .NET Frameworki viite dokumentatsiooni:ASP.net-i konfigureerimise kohta lisateabe saamiseks vaadake järgmist Microsoft .NET Framework Developer's Guide artiklid:ASP.net-i turvalisuse suuniste saamiseks vaadake järgmist MSDN-i dokument:
ASP.net-i autentimine: .NET turbejuhiste
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
Atribuudid

Artikli ID: 301240 – viimati läbi vaadatud: 24. jaan 2017 – redaktsioon: 1

Tagasiside