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

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 301240 - 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 các h?nh th?c xác th?c b?ng cách s? d?ng cơ s? d? li?u đ? lưu tr? nh?ng ngư?i s? d?ng.

Yêu c?u

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

T?o m?t ASP.NET ?ng d?ng b?ng cách s? d?ng C#.NET

  1. M? ph?ng thu tr?c quan.NET.
  2. T?o ra m?t m?i ASP.NET ?ng d?ng Web, và xác đ?nh tên và v? trí.

C?u h?nh thi?t đ?t b?o m?t trong Web.config File

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 ASP.?ng d?ng NET đ? s? d?ng các h?nh th?c d?a trên xác th?c.
  1. Trong gi?i pháp Explorer, m? t?p Web.config.
  2. Thay đ?i ch? đ? xác th?c đ? Các h?nh th?c.
  3. Chèn th? <forms>và đi?n nhaán thu?c tính. (Đ? bi?t thêm thông tin v? các thu?c tính này, xem 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 m? sau đây, và sau đó nh?p vào Dán dư?i d?ng HTML trên cácCh?nh s?a Menu đ? dán m? trong các <authentication></authentication> ph?n c?a 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 m?u cơ s? d? li?u b?ng đ? c?a hàng ngư?i dùng chi ti?t

Ph?n này ch?ng t? làm th? nào đ? t?o ra m?t cơ s? d? li?u m?u đ? Lưu tên ngư?i dùng, m?t kh?u và vai tr? cho nh?ng ngư?i s? d?ng. B?n c?n c?t vai tr? N?u b?n mu?n đ? lưu tr? vai tr? ngư?i dùng trong cơ s? d? li?u và th?c hi?n d?a trên vai tr? an ninh.
  1. Trên các B?t đ?u tr?nh đơn, nh?p vàoCh?y, r?i g? Notepad đ? m? Notepad.
  2. H?y ch?n m? k?ch b?n sau đây SQL, b?m chu?t ph?i vào các M?, và sau đó nh?p vào Sao. Trong Notepad, nh?p vàoDán trên các Ch?nh s?a Menu đ? dán sau đây M? s?:
    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 như 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ơ s? d? li?u, b?m quán rư?u, và ch?y script. Đi?u này t?o ra m?t m?u ngư?i dùng b?ng và populates b?ng trong cơ s? d? li?u quán rư?u đư?c s? d?ng v?i ?ng d?ng m?u này.

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 Dán như HTML tùy ch?n ngày các Ch?nh s?a Menu đ? chèn m? gi?a các<form>Tags:<b00></b00></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 đăng nh?p cho ngư?i dùng đ? cho h? có th? cung c?p tên ngư?i dùng và m?t kh?u đ? đăng nh?p vào ?ng d?ng c?a h?.
  4. Chuy?n sang thi?t k? xem và lưu các trang.

M? x? l? s? ki?n đ? cho nó xác nh?n ch?ng ch? ngư?i dùng

Ph?n này gi?i thi?u các m? đư?c đ?t trong m? phía sau Trang (Logon.aspx.cs).
  1. B?m đúp Đăng nhập đ? m? các Logon.aspx.CS t?p tin.
  2. Chuy?n nh?p không gian tên yêu c?u trong các t?p tin m? phía sau:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. T?o ra m?t ValidateUser ch?c năng đ? xác nh?n ch?ng ch? ngư?i dùng b?ng cách xem các 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 cơ s? d? li?u).
    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. 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 thích h?p trong các cmdLogin_ServerClick s? ki?n. M?u m? đư?c cung c?p cho c? hai k?ch b?n. S? d?ng m?t trong h? theo yêu c?u c?a b?n.
    • G?i cho các RedirectFromLoginPage phương pháp đ? 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 các cmdLogin_ServerClick s? ki?n:
      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);
      }
      						
    • T?o ra vé xác th?c, m?t m? hóa nó, t?o ra m?t cookie, thêm 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 cách b?n t?o cookie. B?n c?ng có th? bao g?m d? li?u tu? ch?nh cùng v?i các FormsAuthenticationTicket trong trư?ng h?p này.
      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. H?y ch?c ch?n r?ng đo?n m? sau s? đư?c thêm vào các InitializeComponent phương pháp trong m? mà t?o ra các trang Web m?u thi?t k?:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

T?o m?t trang Default.aspx

Ph?n này t?o ra m?t trang ki?m tra mà ngư?i dùng đư?c chuy?n hư?ng sau khi h? xác th?c. N?u ngư?i dùng lư?t vào trang này mà không c?n đ?u tiên đăng nh?p ?ng d?ng, h? đư?c chuy?n đ?n trang đăng 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 xem HTML, và sao chép đo?n m? sau gi?a các<form>Tags:<b00></b00></form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Nút này đư?c s? d?ng đ? đăng xu?t kh?i các h?nh th?c xác th?c Phiên làm vi?c.
  3. Chuy?n sang thi?t k? xem và lưu các trang.
  4. Chuy?n nh?p không gian tên yêu c?u trong các t?p tin m? phía sau:
    using System.Web.Security;
    					
  5. B?m đúp SignOut đ? m? m? đ?ng sau trang (Default.aspx.cs), và b?n sao các sau khi m? trong các cmdSignOut_ServerClick x? l? s? ki?n:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. H?y ch?c ch?n r?ng đo?n m? sau s? đư?c thêm vào các InitializeComponent phương pháp trong m? mà t?o ra các trang Web m?u thi?t k?:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Lưu và biên d?ch d? án. Bây gi? b?n có th? s? d?ng các ?ng d?ng.

Thêm ghi chú

  • B?n có th? mu?n đ? lưu tr? m?t kh?u an toàn trong cơ s? d? li?u. B?n có th? s? d?ng các FormsAuthentication ch?c năng ti?n ích l?p đ?t tên HashPasswordForStoringInConfigFile đ? m? hóa m?t kh?u trư?c khi b?n lưu tr? chúng trong 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) do đó b?n có th? d? dàng s?a đ?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? đăng nh?p. Ví d?, b?n có th? bao g?m logic r?ng ch?p nh?n ch? có hai ho?c ba c? g?ng đăng nh?p. N?u ngư?i dùng không th? đăng nh?p vào m?t s? n? l?c, b?n có th? mu?n đ?t m?t lá c? trong các cơ s? d? li?u đ? không cho phép ngư?i dùng đăng nh?p 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 nhau ho?c g?i đư?ng dây h? tr? c?a b?n. Trong 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 Secure Sockets Layer (SSL) v? ?ng d?ng này v? v?y mà không ai có th? đánh l?a cookie xác th?c và b?t k? giá tr? khác thông tin mà đang đư?c truy?n đi.
  • D?a trên các h?nh th?c xác th?c yêu c?u khách hàng c?a b?n ch?p ho?c b?t cookie trên tr?nh duy?t c?a h?.
  • Các th?i gian ch? tham s? 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? trung gian proxy và lưu tr? trên Internet có th? b? nh? cache ph?n ?ng máy ch? Web mà ch?a thông tin thư Set-Cookie, sau đó quay tr? l?i m?t ngư?i s? d?ng khác nhau. B?i v? xác th?c d?a trên các h?nh th?c s? d?ng 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?i nh?n đư?c m?t cookie t? m?t ?y quy?n trung gian hay b? nh? cache đư?c không đư?c ban đ?u đư?c d? đ?nh cho h?.

THAM KH?O

Cho bi?t thêm thông tin v? cách th?c hi?n đơn gi?n d?a trên các h?nh th?c xác th?c nào s? d?ng các <credentials></credentials> ph?n đ? lưu tr? ngư?i dùng và m?t kh?u, h?y tham kh?o sau đây GotDotNet ASP.NET QuickStart m?u:
D?a trên các h?nh th?c xác th?c
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Cho bi?t thêm thông tin v? cách th?c hi?n d?a trên các h?nh th?c ch?ng th?c s? d?ng t?p tin XML đ? lưu tr? ngư?i dùng và m?t kh?u, h?y tham kh?o các Sau ch? đ? trong các.NET Framework Kit phát tri?n ph?n m?m (SDK) tài li?u:
Các h?nh th?c xác th?c b?ng cách s? d?ng 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, ch? đ?n Microsoft sau.NET Framework Developer Guide tài li?u:
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 thông tin v? các System.web.Security không gian tên, đ? c?p đ?n Microsoft sau.NET Framework Tài li?u tham kh?o:
Không gian tên System.web.Security
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, h?y tham kh?o các Theo Microsoft.NET Framework Developer Guide bài vi?t:
ASP.C?u h?nh m?ng
http://msdn2.Microsoft.com/en-us/Library/aa719558 (VS.71) .aspx

ASP.M?NG c?u h?nh ph?n
http://msdn2.Microsoft.com/en-us/Library/w7w4sb0w (vs.71) .aspx
Đ? bi?t thông tin v? ASP.NET nguyên t?c b?o m?t, h?y tham kh?o gi?y tr?ng MSDN sau đây:
Xác th?c trong ASP.NET:.LƯ?I an ninh hư?ng d?n
http://msdn2.Microsoft.com/en-us/Library/ms978378.aspx
Đ? bi?t thông tin t?ng quát hơn v? ASP.NET, h?y tham kh?o các sau MSDN nhóm tin:
Microsoft.Public.DotNet.Framework.aspnet

Thu?c tính

ID c?a bài: 301240 - L?n xem xét sau cùng: 22 Tháng Chín 2011 - Xem xét l?i: 3.0
Áp d?ng
  • 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
T? khóa: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 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 máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? 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 ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i 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, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. 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. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:301240

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