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

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

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

สรุป

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

ความต้องการ

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

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

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

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

ส่วนนี้อธิบายวิธีการเพิ่ม และปรับเปลี่ยนการ<authentication></authentication>และ<authorization></authorization>ส่วนการตั้งค่าคอนฟิกการตั้งค่าคอนฟิกแอพลิเคชัน ASP.NET เมื่อต้องการ ใช้แบบฟอร์มการรับรองความถูกต้อง
  1. ในโซลูชัน Explorer ให้เปิดแฟ้ม Web.config
  2. เปลี่ยนโหมดการรับรองความถูกต้องเป็นแบบฟอร์ม
  3. แทรกแท็ก<Forms>และกรอกข้อมูลในแบบที่เหมาะสม แอตทริบิวต์ (สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะเหล่านี้ อ้างถึงใน MSDN เอกสารหรือเอกสารการเริ่มด่วนที่มีอยู่ในตัว </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. จากเมนู Windowsรีสตาร์ทคลิกเรียกใช้และจากนั้น พิมพ์ แผ่นจดบันทึก เมื่อต้องการเปิด แผ่นจดบันทึก
  2. เน้นรหัสสคริปต์ SQL ต่อไปนี้ คลิกขวา รหัส และจากนั้น คลิกคัดลอก ใน 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และเรียกใช้สคริปต์ วิธีนี้สร้างตารางตัวอย่างผู้ใช้ และ นำใส่เข้าตารางในฐานข้อมูล Pubs ที่จะใช้กับตัวอย่างนี้ แอพลิเคชัน

สร้างเพ Logon.aspx

  1. เพิ่มแบบฟอร์มของเว็บใหม่ไปยังโครงการที่มีชื่อ Logon.aspx
  2. เปิดหน้า Logon.aspx ในการแก้ไข และสลับไปยัง HTML มุมมอง
  3. คัดลอกรหัสต่อไปนี้ และใช้ตัวเลือกการวางเป็น HTMLบนเมนูแก้ไขเมื่อต้องการแทรกรหัสในระหว่าง<form>แท็ก: </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" />
    						
    ใช้แบบฟอร์มของเว็บนี้เพื่อแสดงฟอร์มการเข้าสู่ระบบไปยังผู้ใช้เพื่อให้พวกเขาสามารถ ใส่ชื่อผู้ใช้และรหัสผ่านเพื่อเข้าสู่ระบบไปยังโปรแกรมประยุกต์ของตน
  4. สลับไปยังมุมมองออกแบบ และบันทึกเพจ

รหัสตัวจัดการเหตุการณ์ดังนั้นก็ตรวจสอบข้อมูลประจำตัวผู้ใช้

ส่วนนี้แสดงรหัสที่อยู่ในรหัสข้างหลัง หน้า (Logon.aspx.vb)
  1. เปิดแฟ้ม Logon.aspx.vb
  2. การนำเข้า namespaces จำเป็นในไฟล์รหัสข้างหลัง:
    Imports System.Data.SqlClient
    Imports System.Web.Security
    					
  3. สร้างฟังก์ชันValidateUserเพื่อตรวจสอบข้อมูลประจำตัวผู้ใช้ ด้วยการดูในการ ฐานข้อมูล (ตรวจสอบให้แน่ใจว่า คุณเปลี่ยนแปลงสายอักขระการเชื่อมต่อเพื่อชี้ไปที่ของคุณ ฐานข้อมูล)
    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. คุณสามารถใช้หนึ่งในสองวิธีในการสร้างแบบฟอร์ม คุกกี้การรับรองความถูกต้องและการเปลี่ยนเส้นทางผู้ใช้ไปยังเพจที่เหมาะสมในเหตุการณ์cmdLogin_ServerClick ตัวอย่างโค้ดให้ไว้สำหรับสถานการณ์สมมติทั้งสอง ใช้อย่างใดอย่างหนึ่ง เหล่านั้นตามความต้องการของคุณ
    • เรียกวิธีRedirectFromLoginPageเพื่อสร้างคุกกี้การรับรองความถูกต้องแบบฟอร์มโดยอัตโนมัติ และการเปลี่ยนเส้นทางผู้ใช้ไปยังเพจที่เหมาะสมในเหตุการณ์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
      						
    • สร้างบัตรการรับรองความถูกต้อง การเข้ารหัส สร้าง คุกกี้ การตอบสนอง และเปลี่ยนเส้นทางผู้ใช้ นี้ช่วยให้คุณเพิ่มเติม ควบคุมในวิธีที่คุณสร้างคุกกี้ คุณยังสามารถรวมข้อมูลตามที่กำหนดเอง ด้วยการFormsAuthenticationTicketในกรณีนี้
      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
      						

สร้างเพ Default.aspx

ส่วนนี้สร้างหน้าทดสอบซึ่งผู้ใช้จะถูกเปลี่ยนเส้นทาง หลังจากรับรอง ถ้าผู้ใช้เรียกดูเพจนี้ โดยไม่มีการเข้าสู่ระบบในครั้งแรก ไปยังโปรแกรมประยุกต์ จะมีการเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบ
  1. เปลี่ยนชื่อเพ WebForm1.aspx เป็น Default.aspx และ เปิดแฟ้มในตัวแก้ไข
  2. สลับไปยังมุมมอง HTML และคัดลอกรหัสต่อไปนี้ระหว่าง ที่<form>แท็ก: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    ปุ่มนี้จะใช้ในการออกใบรับรองความถูกต้องของแบบฟอร์ม เซสชัน
  3. สลับไปยังมุมมองออกแบบ และบันทึกเพจ
  4. การนำเข้า namespaces จำเป็นในไฟล์รหัสข้างหลัง:
    Imports System.Web.Security
    					
  5. เปิดข้างหลังโค้ดเพจ (Default.aspx.vb), และสำเนา รหัสต่อไปนี้ในตัวจัดการเหตุการณ์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. บันทึก และการคอมไพล์โครงการ ขณะนี้คุณสามารถใช้การ แอพลิเคชัน

การแก้ไขปัญหา

  • คุณอาจต้องการเก็บรหัสผ่านในฐานข้อมูลได้อย่างปลอดภัย คุณ สามารถใช้ฟังก์ชันคลาFormsAuthenticationโปรแกรมอรรถประโยชน์HashPasswordForStoringInConfigFileที่มีชื่อในการเข้ารหัสรหัสผ่านก่อนที่คุณเก็บไว้ในฐานข้อมูล หรือ แฟ้มการกำหนดค่า
  • คุณอาจต้องการเก็บข้อมูลการเชื่อมต่อ SQL ในการ การกำหนดค่าแฟ้ม (Web.config) เพื่อให้คุณสามารถได้อย่างง่ายดายแก้ไขได้ถ้า จำเป็น
  • คุณอาจพิจารณาการเพิ่มรหัสเพื่อป้องกันไม่ให้แฮกเกอร์ที่พยายาม ใช้การรวมกันของรหัสผ่านจากการเข้าสู่ระบบ ตัวอย่างเช่น คุณสามารถ มีตรรกะที่ยอมรับความพยายามเข้าสู่ระบบที่สอง หรือสามเท่านั้น ถ้าผู้ใช้ไม่สามารถ เข้าสู่ระบบในจำนวนครั้งของความพยายาม คุณอาจต้องการตั้งค่าสถานะในการ ฐานข้อมูลจะไม่อนุญาตให้ผู้ใช้เข้าสู่ระบบจนกว่าผู้ใช้นั้นนไม่ของเขาหรือเธอ บัญชี โดยการเยี่ยมชมเพจแตกต่าง หรือ โดยการเรียกสายของคุณสนับสนุน ใน การบวก คุณควรเพิ่มข้อผิดพลาดที่เหมาะสมจัดการ wherever จำเป็น
  • เนื่องจากผู้ใช้ที่มีข้อจำกัด ขึ้นอยู่กับการรับรองความถูกต้อง คุกกี้ คุณอาจต้องการใช้ การรักษาความปลอดภัย Secure Sockets Layer (SSL) บนแอพลิเคชันนี้ดังนั้น ซึ่งสามารถดึงข้อมูลคุกกี้การรับรองความถูกต้องและ valuable อื่น ๆ ข้อมูลที่จะส่งหรือไม่
  • จำเป็นต้องใช้แบบฟอร์มการรับรองความถูกต้องว่า ไคลเอนต์ของคุณยอมรับ หรือเปิดใช้งานคุกกี้ในเบราว์เซอร์ของพวกเขา
  • พารามิเตอร์การหมดเวลาของการ<authentication></authentication>ส่วนการตั้งค่าคอนฟิกควบคุมช่วงเวลาที่การ มีการสร้างช่วงคุกกี้การรับรองความถูกต้อง คุณสามารถเลือกค่าที่แสดง ดีกว่าประสิทธิภาพและความปลอดภัย
  • พร็อกซีที่เป็นสื่อกลางและแคชบนอินเทอร์เน็ตบางอย่างอาจ แคชการตอบสนองของเซิร์ฟเวอร์เว็บที่ประกอบด้วยการตั้งค่าคุกกี้หัว ซึ่งเป็นแล้ว ส่งกลับไปยังผู้ใช้อื่น เนื่องจากแบบฟอร์มการรับรองความถูกต้องใช้คุกกี้ การพิสูจน์ตัวจริงของผู้ใช้ ซึ่งอาจทำให้ผู้ใช้โดยไม่ได้ตั้งใจ (หรือตั้งใจไป) การเลียนแบบผู้ใช้คนอื่น ด้วยการรับคุกกี้จากพร็อกซีเป็นสื่อกลาง หรือ แคชที่ไม่เดิมขึ้นสำหรับเหล่านั้น

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

สำหรับข้อมูลเกี่ยวกับการใช้งานอย่างง่ายโดยใช้แบบฟอร์ม การรับรองความถูกต้อง โดยใช้การ<credentials></credentials>ส่วนการจัดเก็บผู้ใช้และรหัสผ่าน ดูบทความต่อไปนี้ ในตัวอย่างของการเริ่มด่วน ASP.NET:
ใช้แบบฟอร์มการรับรองความถูกต้อง
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx
สำหรับข้อมูลเกี่ยวกับการใช้งานโดยใช้แบบฟอร์มการรับรองความถูกต้องด้วย การใช้แฟ้ม Extensible Markup Language (XML) เพื่อจัดเก็บผู้ใช้และรหัสผ่าน ดูหัวข้อต่อไปนี้ใน.NET Framework ซอฟต์แวร์พัฒนา Kit (SDK) เอกสารประกอบ:
รับรองความถูกต้องในแบบฟอร์มที่ใช้แฟ้ม XML ผู้ใช้
.aspx http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรักษาความปลอดภัยของแอพลิเคชันเว็บ ASP.NET ดู บทความต่อไปนี้ในเอกสารของ.NET Framework SDK:
ความปลอดภัยของแอพลิเคชันเว็บ ASP.NET
.aspx http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับSystem.Web.Security namespace ดูบทความต่อไปนี้ใน.NET Framework SDK เอกสารประกอบ:
.aspx http://msdn2.microsoft.com/en-us/library/system.web.security (vs.71)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าคอนฟิก ASP.NET ให้ดู บทความของ.NET Framework SDK ดังต่อไปนี้:
การตั้งค่าคอนฟิก 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
สำหรับข้อมูลเพิ่มเติม ดูสมุดบัญชีต่อไปนี้:
Esposito, Dino สร้างเว็บโซลูชันกับ ASP.NET และ ADO.NET. Microsoft Press, 2001

Howard, Michael และ David LeBlanc รหัสความปลอดภัยของการเขียน. Microsoft Press, 2001

คุณสมบัติ

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

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

 

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