วิธีการดำเนินการโดยใช้แบบฟอร์มการรับรองความถูกต้องในโปรแกรมประยุกต์ ASP.NET ของคุณโดยใช้ c# .NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 301240 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการใช้การรับรองความถูกต้องที่ใช้แบบฟอร์ม โดยใช้ฐานข้อมูลการจัดเก็บผู้ใช้

ความต้องการ

รายการต่อไปนี้แสดงฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ โครงสร้างพื้นฐานของเครือข่าย และ service pack ที่คุณต้องการ:
  • Microsoft Visual Studio .NET
  • Microsoft ข้อมูลบริการทางอินเทอร์เน็ต (IIS) รุ่น 5.0 หรือรุ่นใหม่กว่า
  • Microsoft SQL Server

สร้างโปรแกรมประยุกต์ ASP.NET ที่ใช้ c# .NET

  1. เปิด Visual Studio .NET
  2. สร้างโปรแกรมประยุกต์ ASP.NET เว็บใหม่ และระบุชื่อและตำแหน่งที่ตั้ง

การตั้งค่าคอนฟิกการตั้งค่าการรักษาความปลอดภัยในแฟ้ม Web.config

ส่วนนี้อธิบายวิธีการเพิ่ม และปรับเปลี่ยน<authentication></authentication>และ<authorization></authorization>ส่วนกำหนดค่าการกำหนดค่าโปรแกรมประยุกต์ ASP.NET จะใช้โดยแบบฟอร์มการรับรองความถูกต้อง
  1. ในโซลูชัน Explorer ให้เปิดแฟ้ม Web.config
  2. เปลี่ยนโหมดการรับรองความถูกต้องการแบบฟอร์ม.
  3. แทรกแท็ก <forms> และกรอกข้อมูลแอตทริบิวต์ที่เหมาะสม (สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะเหล่านี้ อ้างอิงถึง MSDN เอกสารหรือเอกสาร QuickStart ที่แสดงไว้ใน</forms>อ้างอิง:ส่วน) คัดลอกรหัสต่อไปนี้ และจากนั้น คลิกวางเป็น HTMLในการแก้ไขเมนูการวางรหัสในนั้น<authentication></authentication>ส่วนของแฟ้ม:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. ปฏิเสธการเข้าถึงของผู้ใช้ที่ไม่ระบุชื่อในการ<authorization></authorization>ส่วนต่อไปนี้:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

สร้างตารางฐานข้อมูลตัวอย่างเพื่อเก็บรายละเอียดของผู้ใช้

ส่วนนี้อธิบายวิธีการสร้างฐานข้อมูลตัวอย่างเพื่อเก็บชื่อผู้ใช้ รหัสผ่าน และบทบาทสำหรับผู้ใช้ คุณจำเป็นคอลัมน์บทบาทถ้าคุณต้องการเก็บบทบาทของผู้ใช้ในฐานข้อมูล และใช้การรักษาความปลอดภัยตามบทบาท
  1. ในการเริ่มการทำงานเมนู คลิกเรียกใช้จากนั้น พิมพ์notepadเมื่อต้องการเปิดแผ่นจดบันทึก
  2. เน้นสคริปต์โค้ดต่อไปนี้ของ SQL คลิกขวาที่รหัส และจากนั้น คลิกCopy. ใน Notepad คลิกวางในการแก้ไขเมนูการวางรหัสต่อไปนี้:
    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. บันทึกแฟ้มเป็น Users.sql
  4. บนคอมพิวเตอร์ Microsoft SQL Server เปิด Users.sql ในตัววิเคราะห์คำถาม จากรายการของฐานข้อมูล คลิกpubsและเรียกใช้สคริปต์ ซึ่งสร้างผู้ใช้ตารางตัวอย่าง และ populates ตารางในฐานข้อมูล Pubs ที่จะใช้กับโปรแกรมประยุกต์ตัวอย่างนี้

สร้างเพจ Logon.aspx

  1. เพิ่มแบบฟอร์มของเว็บใหม่กับโครงการอินชื่อ Logon.aspx
  2. เปิดเพ Logon.aspx ในตัวแก้ไข และสลับไปยัง HTML ดู
  3. Copy the following code, and use thePaste as HTMLตัวเลือกในการแก้ไขmenu to insert the code between the<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" />
    						
    This Web Form is used to present a logon form to users so that they can provide their user name and password to log on to the application.
  4. Switch to Design view, and save the page.

Code the Event Handler So That It Validates the User Credentials

This section presents the code that is placed in the code-behind page (Logon.aspx.cs).
  1. คลิกสองครั้งเข้าสู่ระบบto open the Logon.aspx.cs file.
  2. Import the required namespaces in the code-behind file:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. สร้างคำValidateUserfunction to validate the user credentials by looking in the database. (Make sure that you change the Connection string to point to your database).
    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. You can use one of two methods to generate the forms authentication cookie and redirect the user to an appropriate page in thecmdLogin_ServerClickเหตุการณ์ Sample code is provided for both scenarios. Use either of them according to your requirement.
    • เรียกRedirectFromLoginPagemethod to automatically generate the forms authentication cookie and redirect the user to an appropriate page in thecmdLogin_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);
      }
      						
    • Generate the authentication ticket, encrypt it, create a cookie, add it to the response, and redirect the user. This gives you more control in how you create the cookie. You can also include custom data along with theFormsAuthenticationTicketin this case.
      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. Make sure that the following code is added to theInitializeComponentmethod in the code that the Web Form Designer generates:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Create a Default.aspx Page

This section creates a test page to which users are redirected after they authenticate. If users browse to this page without first logging on to the application, they are redirected to the logon page.
  1. Rename the existing WebForm1.aspx page as Default.aspx, and open it in the editor.
  2. Switch to HTML view, and copy the following code between the<form>แท็ก:
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    This button is used to log off the forms authentication session.
  3. Switch to Design view, and save the page.
  4. Import the required namespaces in the code-behind file:
    using System.Web.Security;
    					
  5. คลิกสองครั้งSignOutto open the code-behind page (Default.aspx.cs), and copy the following code in thecmdSignOut_ServerClickevent handler:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Make sure that the following code is added to theInitializeComponentmethod in the code that the Web Form Designer generates:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. บันทึก และการคอมไพล์โครงการ You can now use the application.

หมายเหตุเพิ่มเติม

  • You may want to store passwords securely in a database. You can use theFormsAuthenticationclass utility function namedHashPasswordForStoringInConfigFileto encrypt the passwords before you store them in the database or configuration file.
  • You may want to store the SQL connection information in the configuration file (Web.config) so that you can easily modify it if necessary.
  • You may consider adding code to prevent hackers who try to use different combinations of passwords from logging on. For example, you can include logic that accepts only two or three logon attempts. If the user cannot log on in a certain number of attempts, you may want to set a flag in the database to not allow that user to log on until that user re-enables his or her account by visiting a different page or by calling your support line. In addition, you should add appropriate error handling wherever necessary.
  • Because the user is identified based on the authentication cookie, you may want to use Secure Sockets Layer (SSL) on this application so that no one can deceive the authentication cookie and any other valuable information that is being transmitted.
  • Forms-based authentication requires that your client accept or enable cookies on their browser.
  • กระบวนการหมดเวลาparameter of the<authentication></authentication>configuration section controls the interval at which the authentication cookie is regenerated. You can choose a value that provides better performance and security.
  • Certain intermediary proxies and caches on the Internet may cache Web server responses that contain Set-Cookie headers, which are then returned to a different user. Because forms-based authentication uses a cookie to authenticate users, this can cause users to accidentally (or intentionally) impersonate another user by receiving a cookie from an intermediary proxy or cache that was not originally intended for them.

ข้อมูลอ้างอิง

For more information about how to implement simple forms-based authentication that uses the<credentials></credentials>section to store users and passwords, refer to the following GotDotNet ASP.NET QuickStart sample:
Forms-Based Authentication
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้การตรวจสอบที่ใช้แบบฟอร์มที่ใช้ในแฟ้ม XML ที่เก็บผู้ใช้และรหัสผ่าน อ้างอิงไปยังหัวข้อต่อไปนี้ในการ.NET Framework ซอฟต์แวร์พัฒนา Kit (SDK) เอกสาร:
รับรองความถูกต้องในแบบฟอร์มที่มีแฟ้มของผู้ใช้ XML ในการใช้
.aspx http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรักษาความปลอดภัยของแอพลิเคชันเว็บ ASP.NET อ้างอิงถึงนักการต่อไปนี้ Microsoft .NET Framework พัฒนาของเอกสารที่แนะนำ:
ความปลอดภัยของแอพลิเคชันเว็บ asp.net
.aspx http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการSystem.Web.Securitynamespace, .NET Framework ต่อไปนี้ของ Microsoft โปรดดูเอกสารประกอบของการอ้างอิง:
System.Web.Security Namespace
.aspx http://msdn2.microsoft.com/en-us/library/system.web.security (vs.71)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าคอนฟิกของ ASP.NET ดูบทความของคำแนะนำสำหรับนักการต่อไปนี้ Microsoft .NET Framework พัฒนาของ:
การตั้งค่าคอนฟิกของ asp.net
.aspx http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71)

ส่วนกำหนดค่าของ asp.net
.aspx http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71)
สำหรับข้อมูลเกี่ยวกับแนวทางการรักษาความปลอดภัยของ ASP.NET อ้างอิงทางเทคนิคกระดาษดังต่อไปนี้ของ MSDN:
การรับรองความถูกต้องใน ASP.NET: คำแนะนำในการรักษาความปลอดภัย.NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
สำหรับข้อมูลเพิ่มเติมทั่วไปเกี่ยวกับ ASP.NET อ้างอิงไปยังกลุ่มข่าวสาร MSDN ต่อไปนี้:
microsoft.public.dotnet.framework.aspnet

คุณสมบัติ

หมายเลขบทความ (Article ID): 301240 - รีวิวครั้งสุดท้าย: 22 กันยายน 2554 - Revision: 3.0
ใช้กับ
  • 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
Keywords: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:301240

ให้ข้อเสนอแนะ

 

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