ID Artikel: 301240 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

Bagaimana menerapkan otentikasi berbasis bentuk di ASP Anda.NET aplikasi dengan menggunakan C#.NET

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menunjukkan bagaimana menerapkan berbasis bentuk otentikasi dengan menggunakan database untuk menyimpan pengguna.

Persyaratan

Daftar berikut menguraikan fitur perangkat keras, perangkat lunak, jaringan infrastruktur, dan paket layanan yang Anda butuhkan:
  • Microsoft Visual Studio.NET
  • Layanan Informasi Internet Microsoft (IIS) versi 5.0 atau yang lebih baru
  • Microsoft SQL Server

Menciptakan situs web ASP.NET aplikasi menggunakan C#.NET

  1. Membuka Visual Studio.NET.
  2. Membuat ASP baru.NET aplikasi Web, dan menentukan nama dan lokasi.

Mengkonfigurasi pengaturan keamanan di Web.config File

Bagian ini menunjukkan cara menambah dan mengubah <authentication></authentication> dan <authorization></authorization> bagian konfigurasi untuk mengkonfigurasi ASP.NET aplikasi untuk menggunakan otentikasi berbasis bentuk.
  1. Dalam solusi Explorer, buka Web.config file.
  2. Mengubah mode otentikasi untuk Bentuk.
  3. Menyisipkan <forms>tag, dan mengisi yang sesuai atribut. (Untuk informasi lebih lanjut mengenai atribut ini, merujuk kepada MSDN dokumentasi atau dokumentasi QuickStart yang tercantum dalam </forms>REFERENSI bagian.) Salinan kode berikut, dan kemudian klik Pasta sebagai HTML padaMengedit menu untuk menyisipkan kode di <authentication></authentication> bagian dari file:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. Menolak akses ke pengguna anonim di <authorization></authorization> bagian sebagai berikut:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Membuat tabel Database contoh untuk toko pengguna rincian

Bagian ini menunjukkan cara membuat database contoh untuk menyimpan nama pengguna, sandi, dan peran bagi pengguna. Anda perlu kolom peran Jika Anda ingin menyimpan peran pengguna dalam database dan menerapkan berbasis peran keamanan.
  1. Pada Mulai menu, klikMenjalankan, kemudian ketik Notepad untuk membuka Notepad.
  2. Menyoroti kode skrip SQL berikut, klik kanan kode, dan kemudian klik Salin. Dalam Notepad, klikPasta pada Mengedit menu untuk menyisipkan berikut kode:
    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. Simpan sebagai file Users.sql.
  4. Pada komputer Microsoft SQL Server, buka Users.sql dalam Permintaan Analyzer. Dari daftar database, klik pub, dan menjalankan script. Ini menciptakan tabel pengguna contoh dan saran populates meja di database pub untuk digunakan dengan aplikasi sampel ini.

Buat halaman Logon.aspx

  1. Tambahkan formulir Web baru untuk proyek yang dinamai Logon.aspx.
  2. Buka halaman Logon.aspx di editor, dan beralih ke HTML Lihat.
  3. Salin kode berikut, dan menggunakan Pasta sebagai HTML pilihan di Mengedit menu untuk memasukkan kode antara<form>Tag:<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" />
    						
    Formulir Web ini digunakan untuk mempresentasikan bentuk logon pengguna sehingga mereka dapat memberikan nama pengguna dan sandi untuk masuk ke aplikasi mereka.
  4. Beralih ke tampilan desain, dan menyimpan halaman.

Kode Event Handler sehingga memvalidasi kredensial pengguna

Bagian ini menyajikan kode yang ditempatkan di kode di belakang Halaman (Logon.aspx.cs).
  1. Klik dua kali Logon untuk membuka Logon.aspx.cs file.
  2. Impor namespaces diperlukan dalam kode-file di belakang:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Membuat ValidateUser fungsi untuk memvalidasi kredensial pengguna dengan melihat di database. (Pastikan bahwa Anda mengubah koneksi string untuk menunjuk ke Anda 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. Anda dapat menggunakan salah satu dari dua metode untuk menghasilkan bentuk kuki pembuktian keaslian dan mengarahkan ulang pengguna ke halaman yang sesuai di cmdLogin_ServerClick acara. Contoh kode yang diberikan untuk kedua skenario. Menggunakan salah satu mereka sesuai dengan kebutuhan Anda.
    • Panggilan RedirectFromLoginPage metode untuk secara otomatis menghasilkan bentuk otentikasi cookie dan mengarahkan ulang pengguna ke halaman yang sesuai di cmdLogin_ServerClick acara:
      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);
      }
      						
    • Menghasilkan tiket otentikasi, mengenkripsi itu, membuat kuki, menambahkan respon, dan mengarahkan ulang pengguna. Ini memberi Anda lebih banyak kontrol di bagaimana Anda membuat cookie. Anda dapat juga menyertakan data kustom bersama dengan FormsAuthenticationTicket dalam kasus ini.
      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. Pastikan bahwa kode berikut akan ditambahkan ke InitializeComponent metode dalam kode yang menghasilkan bentuk Web Designer:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Buat halaman Default.aspx

Bagian ini menciptakan halaman pengujian yang mengarahkan pengguna setelah mereka melakukan otentikasi. Jika pengguna browse ke Halaman ini tanpa logon pertama untuk aplikasi, mereka diarahkan ke halaman logon.
  1. Mengubah nama halaman WebForm1.aspx ada sebagai Default.aspx, dan membukanya dalam editor.
  2. Beralih ke tampilan HTML, dan menyalin kode berikut antara The<form>Tag:<b00></b00></form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Tombol ini digunakan untuk log off bentuk-bentuk otentikasi sesi.
  3. Beralih ke tampilan desain, dan menyimpan halaman.
  4. Impor namespaces diperlukan dalam kode-file di belakang:
    using System.Web.Security;
    					
  5. Klik dua kali SignOut untuk membuka kode di belakang halaman (BT_GetFeeds), dan salinan Berikut kode di cmdSignOut_ServerClick event handler:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Pastikan bahwa kode berikut akan ditambahkan ke InitializeComponent metode dalam kode yang menghasilkan bentuk Web Designer:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Simpan dan mengkompilasi proyek. Anda sekarang dapat menggunakan aplikasi.

Catatan tambahan

  • Anda mungkin ingin menyimpan password aman dalam database. Anda dapat menggunakan FormsAuthentication kelas fungsi utilitas bernama HashPasswordForStoringInConfigFile untuk mengenkripsi password sebelum Anda menyimpannya dalam database atau file konfigurasi.
  • Anda mungkin ingin menyimpan informasi koneksi SQL dalam file konfigurasi (Web.config) sehingga Anda dapat dengan mudah memodifikasi jika diperlukan.
  • Anda dapat mempertimbangkan untuk menambahkan kode untuk mencegah hacker yang mencoba untuk menggunakan berbagai kombinasi password dari log on. Sebagai contoh, Anda dapat termasuk logika yang menerima hanya dua atau tiga percobaan. Jika pengguna tidak dapat masuk dalam jumlah tertentu upaya, Anda mungkin ingin mengatur bendera database untuk memungkinkan pengguna untuk login sampai pengguna re-enables nya atau dia account dengan mengunjungi halaman yang berbeda atau dengan menelepon baris dukungan Anda. Dalam Selain itu, Anda harus menambahkan sesuai kesalahan penanganan di mana pun diperlukan.
  • Karena pengguna diidentifikasi berdasarkan otentikasi cookie, Anda mungkin ingin menggunakan Secure Sockets Layer (SSL) pada aplikasi ini sangat bahwa tidak ada yang dapat menipu cookie otentikasi dan berharga lain informasi yang ditransmisikan.
  • Otentikasi berbasis bentuk memerlukan klien Anda menerima atau mengaktifkan cookie pada browser mereka.
  • The timeout parameter <authentication></authentication> bagian konfigurasi kontrol interval di mana kuki pembuktian dibuat ulang. Anda dapat memilih nilai yang menyediakan lebih baik kinerja dan keamanan.
  • Perantara proxy dan cache pada Internet tertentu mungkin cache Web server tanggapan yang berisi header Set-Cookie, yang kemudian kembali ke pengguna yang berbeda. Karena otentikasi berbasis bentuk menggunakan cookie untuk mengotentikasi pengguna, ini dapat menyebabkan pengguna untuk sengaja (atau sengaja) meniru pengguna lain dengan menerima cookie dari proxy perantara atau cache yang awalnya ditujukan untuk mereka.

REFERENSI

Untuk informasi lebih lanjut tentang cara menerapkan sederhana otentikasi berbasis bentuk yang menggunakan <credentials></credentials> bagian untuk menyimpan pengguna dan password, merujuk pada berikut GotDotNet ASP.NET QuickStart contoh:
Otentikasi berbasis bentuk
http://quickstarts.ASP.net/QuickStartv20/Aspnet/doc/Security/formsauth.aspx (http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx)
Untuk informasi lebih lanjut tentang cara menerapkan berbasis bentuk otentikasi yang menggunakan XML file untuk menyimpan pengguna dan password, merujuk kepada Berikut topik di.NET Framework Software Development Kit (SDK) Dokumentasi:
Bentuk-bentuk otentikasi menggunakan XML File pengguna
.aspx http://msdn2.Microsoft.com/en-us/library/1b1y85bh (vs.71) (http://msdn2.microsoft.com/en-us/library/1b1y85bh(vs.71).aspx)
Untuk informasi lebih lanjut tentang ASP.NET Web aplikasi keamanan, merujuk kepada Microsoft berikut.NET Framework Developer panduan Dokumentasi:
ASP.Keamanan aplikasi NET Web
.aspx http://msdn2.Microsoft.com/en-us/library/330a99hc (vs.71) (http://msdn2.microsoft.com/en-us/library/330a99hc(vs.71).aspx)
Untuk informasi lebih lanjut tentang System.web.Security namespace, merujuk kepada Microsoft berikut.NET Framework Referensi dokumentasi:
System.web.Security Namespace
.aspx http://msdn2.Microsoft.com/en-us/library/System.web.Security (vs.71) (http://msdn2.microsoft.com/en-us/library/system.web.security(vs.71).aspx)
Untuk informasi lebih lanjut tentang ASP.NET konfigurasi, merujuk kepada Microsoft berikut.NET Framework Developer panduan artikel:
ASP.Konfigurasi bersih
.aspx http://msdn2.Microsoft.com/en-us/library/aa719558 (VS.71) (http://msdn2.microsoft.com/en-us/library/aa719558(VS.71).aspx)

ASP.Bagian konfigurasi bersih
.aspx http://msdn2.Microsoft.com/en-us/library/w7w4sb0w (vs.71) (http://msdn2.microsoft.com/en-us/library/w7w4sb0w(vs.71).aspx)
Untuk informasi tentang ASP.NET keamanan pedoman, merujuk kepada kertas putih MSDN berikut:
Otentikasi di ASP.NET:.BERSIH keamanan bimbingan
http://msdn2.Microsoft.com/en-us/library/ms978378.aspx (http://msdn2.microsoft.com/en-us/library/ms978378.aspx)
Untuk lebih banyak informasi umum tentang ASP.NET, merujuk kepada newsgroup MSDN berikut:
Microsoft.Public.DotNet.Framework.Aspnet (http://msdn.microsoft.com/newsgroups/default.aspx?query=microsoft.public.dotnet.framework.aspnet&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)

Berlaku bagi:
  • 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
Kata kunci: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:301240  (http://support.microsoft.com/kb/301240/en-us/ )