Làm th? nào đ? th?c hi?n d?a trên h?nh th?c xác th?c trong ?ng d?ng ASP.NET c?a b?n b?ng cách s? d?ng Visual Basic .NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 308157 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

Tóm t?t

Bài vi?t này ch?ng t? làm th? nào đ? th?c hi?n d?a trên h?nh th?c xác th?c b?ng cách s? d?ng b? máy cơ s? d? li?u đ? lưu tr? nh?ng ngư?i s? d?ng.

Yêu c?u

Danh sách sau đây tóm t?t các ph?n c?ng đư?c đ? ngh?, ph?n m?m, cơ s? h? t?ng m?ng, và gói b?n ghi d?ch v? mà b?n c?n:
  • Microsoft Visual Studio Net
  • Microsoft SQL Server
  • Microsoft Internet Information Services (IIS) phiên b?n 5.0 ho?c m?i hơn

T?o ra m?t ?ng d?ng ASP.NET s? d?ng Visual Basic .NET

  1. M? h?nh ?nh Studio net.
  2. T?o m?t ?ng d?ng ASP.NET Web m?i, và xác đ?nh tên và v? trí.

Đ?t c?u h?nh các thi?t đ?t b?o m?t trong các t?p tin Web.config

Ph?n này ch?ng t? làm th? nào đ? thêm và s?a đ?i các <authentication></authentication><authorization></authorization> c?u h?nh ph?n c?u h?nh ?ng d?ng ASP.NET s? d?ng xác th?c d?a trên h?nh th?c.
  1. Trong gi?i pháp Explorer, m? t?p tin Web.config.
  2. Thay đ?i ch? đ? xác th?c v?i h?nh th?c.
  3. Chèn t? khóa <Forms>và đi?n vào thích h?p thu?c tính. (Đ? bi?t thêm chi ti?t v? các thu?c tính này, h?y tham kh?o MSDN tài li?u ho?c tài li?u QuickStart đư?c li?t kê trong các </Forms>TÀI LI?U THAM KH?O ph?n.) Sao chép các sau m?, và sau đó nh?p vào dán dư?i d?ng HTML trên menu ch?nh s?a đ? dán m? này trong các <authentication></authentication> c?a các t?p tin:
    <authentication mode="Forms">
    	<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    	protection="All" path="/" timeout="30" />
    </authentication>
    					
  4. T? ch?i truy c?p cho ngư?i dùng vô danh trong các <authorization></authorization> ph?n như sau:
    <authorization>
    	<deny users ="?" />
    	<allow users = "*" />
    </authorization>
    					

T?o ra m?t b?ng b? máy cơ s? d? li?u m?u đ? lưu tr? thông tin chi ti?t ngư?i dùng

Ph?n này ch?ng t? làm th? nào đ? t?o ra m?t b? máy cơ s? d? li?u m?u đ? lưu tr? tên người dùng, m?t kh?u và các vai tr? cho ngư?i dùng. B?n c?n các c?t vai tr? N?u b?n mu?n đ? lưu tr? các vai tr? ngư?i dùng trong b? máy cơ s? d? li?u và th?c hi?n d?a trên vai tr? an ninh.
  1. T? menu Windows B?t đ?u , b?m ch?y, và sau đó g? Notepad đ? m? Notepad.
  2. Làm n?i b?t m? k?ch b?n SQL sau, b?m chu?t ph?i vào các M?, và sau đó nh?p vào sao chép. Trong Notepad, h?y nh?p vào dán trên menu ch?nh s?a đ? dán đo?n m? sau:
    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. Lưu t?p dư?i d?ng Users.sql.
  4. Trên máy tính c?a Microsoft SQL Server, m? Users.sql trong Phân tích truy v?n. T? danh sách các b? máy cơ s? d? li?u, nh?p vào quán rư?u, b?t lên và ch?y script. Đi?u này t?o ra m?t m?u ngư?i s? d?ng b?ng và populates b?ng trong b? máy cơ s? d? li?u quán rư?u đư?c s? d?ng v?i m?u này ?ng d?ng.

T?o m?t trang Logon.aspx

  1. Thêm m?t m?u Web m?i cho d? án đư?c đ?t tên Logon.aspx.
  2. M? trang Logon.aspx trong tr?nh so?n th?o, và chuy?n sang HTML xem.
  3. Copy đo?n m? sau, và s? d?ng các tùy ch?n dán dư?i d?ng HTML trên menu ch?nh s?a đ? chèn m? gi?a các<form>Tags: </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" />
    						
    Bi?u m?u Web này đư?c s? d?ng đ? tr?nh bày m?t h?nh th?c kí nh?p cho ngư?i dùng đ? h? có th? cung c?p tên người dùng và m?t kh?u đ? kí nh?p vào ?ng d?ng c?a h?.
  4. Chuy?n sang thi?t k?, và ti?t ki?m các trang.

M? B? x? lí bi?n c? đ? nó xác nh?n thông tin kí nh?p ngư?i dùng

Ph?n này tr?nh bày các m? đư?c đ?t trong m? đ?ng sau Trang (Logon.aspx.vb).
  1. M? t?p tin Logon.aspx.vb.
  2. Nh?p kh?u các không gian tên yêu c?u trong các t?p tin m? phía sau:
    Imports System.Data.SqlClient
    Imports System.Web.Security
    					
  3. T?o ra m?t ch?c năng ValidateUser đ? xác nh?n thông tin kí nh?p ngư?i dùng b?ng cách xem các b? máy cơ s? d? li?u. (H?y ch?c ch?n r?ng b?n thay đ?i chu?i k?t n?i đ?n đi?m đ?n c?a b?n b? máy cơ s? d? li?u.)
    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. B?n có th? s? d?ng m?t trong hai phương pháp đ? t?o ra các h?nh th?c cookie xác th?c và chuy?n hư?ng ngư?i dùng đ?n m?t trang phù h?p trong s? ki?n cmdLogin_ServerClick . M?u m? đư?c cung c?p cho c? hai t?nh hu?ng. S? d?ng m?t trong hai h? theo yêu c?u c?a b?n.
    • G?i phương pháp RedirectFromLoginPage đ? t? đ?ng t?o ra cookie xác th?c c?a các h?nh th?c và chuy?n hư?ng ngư?i dùng đ?n m?t trang thích h?p trong trư?ng h?p 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
      						
    • T?o ra xác th?c qua phi?u, m?t m? hóa nó, t?o ra m?t cookie, thêm nó vào các ph?n ?ng, và chuy?n hư?ng ngư?i s? d?ng. Đi?u này s? cho b?n nhi?u hơn n?a ki?m soát trong làm th? nào b?n t?o ra các cookie. B?n c?ng có th? bao g?m các d? li?u tu? ch?nh căn dọc v?i FormsAuthenticationTicket trong trư?ng h?p này.
      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
      						

T?o m?t trang Default.aspx

Ph?n này t?o ra m?t trang th? nghi?m mà ngư?i dùng đư?c chuy?n hư?ng sau khi h? xác th?c. N?u ngư?i dùng duy?t đ?n trang này mà không c?n đ?u tiên kí nh?p ?ng d?ng, h? đư?c chuy?n hư?ng đ?n trang kí nh?p.
  1. Đ?i tên trang WebForm1.aspx hi?n t?i như Default.aspx, và m? nó trong tr?nh so?n th?o.
  2. Chuy?n sang ch? đ? xem HTML, và sao chép đo?n m? sau gi?a Các<form>Tags: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    nút ch?n m?t này đư?c s? d?ng đ? kí nh?p t?t h?nh th?c xác th?c Phiên làm vi?c.
  3. Chuy?n sang thi?t k?, và ti?t ki?m các trang.
  4. Nh?p kh?u các không gian tên yêu c?u trong các t?p tin m? phía sau:
    Imports System.Web.Security
    					
  5. M? m? đ?ng sau trang (Default.aspx.vb), và sao chép các sau khi m? trong B? x? lí bi?n c? 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. Ti?t ki?m và biên d?ch d? án. Bây gi? b?n có th? s? d?ng các ?ng d?ng.

Kh?c ph?c s? c?

  • B?n có th? mu?n đ? lưu tr? m?t kh?u an toàn trong m?t b? máy cơ s? d? li?u. B?n có th? s? d?ng ch?c năng ti?n ích l?p FormsAuthentication đư?c đ?t tên là HashPasswordForStoringInConfigFile đ? m? hóa m?t kh?u trư?c khi b?n lưu tr? chúng trong b? máy cơ s? d? li?u ho?c t?p tin c?u h?nh.
  • B?n có th? mu?n đ? lưu tr? thông tin k?t n?i SQL trong các c?u h?nh t?p tin (Web.config) đ? b?n có th? d? dàng thay đ?i nó n?u c?n thi?t.
  • B?n có th? xem xét thêm m? đ? ngăn ch?n tin t?c ngư?i c? g?ng đ? s? d?ng k?t h?p khác nhau c?a m?t kh?u t? kí nh?p. Ví d?, b?n có th? bao g?m logic mà ch?p nh?n ch? có hai ho?c ba c? g?ng kí nh?p. N?u ngư?i dùng không th? kí nh?p vào trong m?t s? n? l?c, b?n có th? mu?n đ?t m?t lá c? trong các b? máy cơ s? d? li?u đ? không cho phép ngư?i dùng đ? kí nh?p vào cho đ?n khi ngư?i dùng đó re-enables m?nh tài kho?n b?ng cách truy c?p m?t trang khác ho?c b?ng cách g?i đư?ng dây h? tr? c?a b?n. ? Ngoài ra, b?n nên thêm thích h?p l?i x? l? b?t c? nơi nào c?n thi?t.
  • B?i v? ngư?i dùng đư?c xác đ?nh d?a trên vi?c xác th?c cookie, b?n có th? mu?n s? d?ng Tầng Khe Bảo mật (SSL) v? ?ng d?ng này v? v?y r?ng không có ai có th? l?y cookie xác th?c và b?t k? giá tr? khác thông tin đư?c truy?n đi.
  • Xác th?c d?a trên h?nh th?c yêu c?u r?ng khách hàng c?a b?n ch?p nh?n ho?c b?t cookie trên tr?nh duy?t c?a h?.
  • Các thông s? th?i gian ch? c?a các <authentication></authentication> c?u h?nh ph?n ki?m soát kho?ng th?i gian mà t?i đó các cookie xác th?c tái t?o. B?n có th? ch?n các giá tr? cung c?p t?t hơn hi?u su?t và b?o m?t.
  • M?t s? proxy trung gian và lưu tr? trên Internet có th? b? nh? cache ph?n ?ng Máy ch? Web có tiêu đ? thi?t l?p Cookie, sau đó quay tr? l?i m?t ngư?i s? d?ng khác nhau. B?i v? s? d?ng xác th?c d?a trên h?nh th?c m?t cookie xác th?c ngư?i dùng, đi?u này có th? gây ra ngư?i dùng vô t?nh (ho?c c? ?) m?o danh ngư?i dùng khác b?ng cách nh?n đư?c m?t cookie t? m?t proxy trung gian ho?c b? nh? cache không ban đ?u dành cho h?.

Tham kh?o

Đ? bi?t thông tin v? vi?c th?c hi?n đơn gi?n d?a trên h?nh th?c xác th?c b?ng cách s? d?ng các <credentials></credentials> ph?n đ? lưu tr? ngư?i dùng và m?t kh?u, h?y xem bài vi?t sau đây trong m?u ASP.NET QuickStart:
Xác th?c d?a trên h?nh th?c
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Đ? bi?t thông tin v? vi?c th?c hi?n xác th?c d?a trên h?nh th?c b?i b?ng cách s? d?ng m?t t?p tin m? r?ng đánh d?u ki?m ngôn ng? (XML) đ? lưu tr? ngư?i dùng và m?t kh?u, xem các ch? đ? sau trong Khuôn kh? .NET ph?n m?m phát tri?n Kit (SDK) tài li?u:
Các h?nh th?c xác th?c b?ng cách s? d?ng m?t t?p tin ngư?i s? d?ng XML
http://msdn2.Microsoft.com/en-US/Library/1b1y85bh (vs.71) .aspx
Đ? bi?t thêm chi ti?t v? ASP.NET Web ?ng d?ng b?o m?t, h?y xem Bài vi?t sau trong tài li?u Khuôn kh? .NET SDK:
ASP.NET Web ?ng d?ng b?o m?t
http://msdn2.Microsoft.com/en-US/Library/330a99hc (vs.71) .aspx
Đ? bi?t thêm chi ti?t v? không gian tên System.Web.Security , xem các bài vi?t sau đây trong Khuôn kh? .NET SDK tài li?u:
http://msdn2.Microsoft.com/en-US/Library/System.web.Security (vs.71) .aspx
Đ? bi?t thêm chi ti?t v? ASP.NET c?u h?nh, xem các Khuôn kh? .NET SDK bài vi?t sau đây:
ASP.NET c?u h?nh
http://msdn2.Microsoft.com/en-US/Library/aa719558 (VS.71) .aspx

ASP.NET c?u h?nh ph?n
http://msdn2.Microsoft.com/en-US/Library/w7w4sb0w (vs.71) .aspx
Cho thông tin v? ASP.NET an ninh hư?ng d?n, h?y xem m?c sau Gi?y tr?ng MSDN:
Xác th?c trong ASP.NET: .NET an ninh hư?ng d?n
http://msdn2.Microsoft.com/en-US/Library/ms978378.aspx
Đ? bi?t thêm chi ti?t, xem các cu?n sách sau đây:
Esposito, kh?ng long. Xây d?ng web site gi?i pháp v?i ASP.NET và ADO.NET. Microsoft Press, 2001.

Howard, Michael và David LeBlanc. Vi?t m? an toàn. Microsoft Press, 2001.

Thu?c tính

ID c?a bài: 308157 - L?n xem xét sau cùng: 28 Tháng Sáu 2013 - Xem xét l?i: 3.0
Áp d?ng
  • 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
T? khóa: 
kbproductlink kbconfig kbhowtomaster kbsecurity kbweb kbmt KB308157 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài viết này được d?ch b?ng phần mềm dịch thu?t của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa l?i thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung c?p các bài vi?t đư?c c? biên d?ch viên và ph?n m?m d?ch thu?t th?c hi?n và c?ng đ?ng ch?nh s?a l?i đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng nhi?u ngôn ng? Tuy nhiên, bài vi?t do máy d?ch hoặc thậm chí cộng đồng chỉnh sửa sau không ph?i lúc nào c?ng hoàn h?o. Các bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: 308157

Cung cấp Phản hồi

 

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