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

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 301240 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

Ringkasan

Artikel ini menunjukkan bagaimana untuk mengimplementasikan forms-based otentikasi dengan menggunakan database untuk menyimpan pengguna.

Persyaratan

Daftar berikut menguraikan fitur peranti penangkap keras, peranti penangkap lunak, infrastruktur jaringan, dan Service Pack yang Anda butuhkan:
  • Microsoft Visual Studio .NET
  • Layanan Informasi Internet Microsoft (IIS) versi 5.0 atau kemudian
  • Microsoft SQL Server

Membuat aplikasi ASP.NET menggunakan C# .NET

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

Mengkonfigurasi pengaturan keamanan dalam berkas Web.config

Bagian ini menunjukkan cara menambah dan mengubah <authentication></authentication> dan <authorization></authorization> bagian konfigurasi untuk mengkonfigurasi aplikasi ASP.NET menggunakan otentikasi berbasis bentuk.
  1. Pada solusi Explorer, buka berkas Web.config.
  2. Mengubah modus otentikasi ke bentuk.
  3. Masukkan <Forms>tag, dan isi yang sesuai atribut. (Untuk informasi lebih lanjut tentang atribut ini, lihat MSDN dokumentasi atau dokumentasi QuickStart yang tercantum dalam </Forms>REFERENSI Bagian.) kopi karbon kode berikut, dan kemudian klik Paste HTML padaEdit Menu untuk menyisipkan kode di <authentication></authentication> dari berkas:
    <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 Daftar Tabel Database contoh untuk rincian penyimpanan pengguna

Bagian ini menunjukkan bagaimana untuk 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. Menyorot kode skrip SQL berikut, klik kanan-atas kode, dan kemudian klik kopi karbon. Dalam Notepad, klikPasta pada Edit Menu untuk paste 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 file sebagai Users.sql.
  4. Pada komputer Microsoft SQL Server, buka Users.sql di Query Analyzer. Dari daftar database, klik pub, dan menjalankan script. Ini menciptakan Daftar Tabel pengguna contoh dan populates Daftar Tabel di Pub database untuk digunakan dengan aplikasi sampel ini.

Buat Halaman log masuk.aspx

  1. Tambahkan formulir Web baru untuk proyek yang dinamai log masuk.aspx.
  2. Membuka halaman log masuk.aspx di editor, dan beralih ke HTML Lihat.
  3. Salin kode berikut, dan menggunakan Pasta sebagai HTML opsi pada Edit Menu untuk memasukkan kode antara<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" />
    						
    Formulir Web ini digunakan untuk mempresentasikan bentuk log-masuk untuk pengguna sehingga mereka dapat memberikan Nama pengguna dan sandi untuk log-masuk ke aplikasi.
  4. Beralih ke tampilan Desain, dan menyimpan halaman.

Kode Pengangan kejadian sehingga memvalidasi kredensial pengguna

Menyampaikan kode yang ditempatkan di belakang kode Halaman (Logon.aspx.cs).
  1. klik ganda Log-masuk untuk membuka Berkas log masuk.aspx.cs.
  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 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 cookie otentikasi dan redirect pengguna ke halaman yang sesuai dalam acara cmdLogin_ServerClick . Contoh kode yang diberikan untuk kedua skenario. Menggunakan salah satu mereka kebutuhan Anda.
    • Memanggil metode RedirectFromLoginPage untuk secara otomatis menghasilkan bentuk otentikasi cookie dan mengarahkan ulang pengguna ke halaman yang sesuai dalam acara cmdLogin_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);
      }
      						
    • Menghasilkan otentikasi tiket, mengenkripsinya, membuat cookie, menambahkannya ke respon, dan mengarahkan ulang pengguna. Ini memberi Anda lebih banyak kontrol di bagaimana Anda membuat cookie. Anda dapat juga menyertakan data kustom sepanjang 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 ditambahkan ke InitializeComponent metode dalam kode yang menghasilkan desain formulir Web:
    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 telusuri paling detail Halaman ini tanpa log masuk pertama untuk aplikasi, mereka diarahkan ke halaman log masuk.
  1. Mengubah nama halaman yang ada WebForm1.aspx sebagai Default.aspx, dan membukanya dalam editor.
  2. Beralih ke tampilan HTML, dan salin kode berikut antara The<form>Tags: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    tombol tekan ini digunakan untuk log-keluar 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 ganda SignOut ke halaman terbuka di belakang kode (BT_GetFeeds), dan kopi karbon kode berikut 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 ditambahkan ke InitializeComponent metode dalam kode yang menghasilkan desain formulir Web:
    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 sandi aman dalam database. Anda dapat menggunakan fungsi utilitas kelas FormsAuthentication yang bernama HashPasswordForStoringInConfigFile untuk mengenkripsi sandi 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 menambahkan kode untuk mencegah hacker yang mencoba untuk menggunakan berbagai kombinasi password dari log on. Misalnya, Anda dapat termasuk logika yang menerima hanya dua atau tiga usaha log masuk. Jika pengguna tidak dapat log-masuk dalam jumlah tertentu upaya, Anda mungkin ingin mengatur bendera database untuk memungkinkan pengguna untuk log-masuk hingga pengguna re-enables dirinya account dengan mengunjungi halaman yang berbeda atau dengan menelepon baris dukungan Anda. Dalam Selain itu, Anda harus menambahkan sesuai kesalahan penanganan dimanapun diperlukan.
  • Karena pengguna diidentifikasi berdasarkan otentikasi cookie, Anda mungkin ingin menggunakan Secure Sockets Layer (SSL) pada aplikasi ini jadi tidak seorang pun bisa menipu cookie otentikasi dan berharga lain informasi yang ditransmisikan.
  • Otentikasi berbasis bentuk memerlukan bahwa klien Anda menerima atau mengaktifkan cookies pada browser mereka.
  • Timeout parameter <authentication></authentication> bagian konfigurasi kontrol interval di mana cookie otentikasi dibuat ulang. Anda dapat memilih nilai yang menyediakan lebih baik kinerja dan keamanan.
  • Perantara proxy dan cache pada Internet tertentu mungkin cache server Web tanggapan yang berisi header Set-Cookie, yang kemudian kembali ke pengguna lain. Karena menggunakan bentuk-bentuk otentikasi berbasis cookie mengotentikasi pengguna, ini dapat menyebabkan pengguna untuk sengaja (atau sengaja) menyamar sebagai pengguna lain dengan menerima cookie dari proxy perantara atau cache yang awalnya tidak dimaksudkan untuk mereka.

Referensi

Untuk selengkapnya tentang cara menerapkan sederhana otentikasi berbasis bentuk yang menggunakan <credentials></credentials> bagian untuk menyimpan pengguna dan sandi, lihat berikut GotDotNet ASP.NET QuickStart contoh:
Otentikasi berbasis bentuk
http://quickstarts.asp.net/QuickStartv20/Aspnet/Doc/Security/formsauth.aspx
Untuk selengkapnya 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 File XML pengguna
.aspx http://msdn2.Microsoft.com/en-US/Library/1b1y85bh (vs.71)
Untuk informasi lebih lanjut tentang keamanan aplikasi ASP.NET Web, merujuk ke panduan berikut Microsoft .NET Framework pengembang Dokumentasi:
Keamanan aplikasi ASP.NET Web
.aspx http://msdn2.Microsoft.com/en-US/Library/330a99hc (vs.71)
Untuk informasi lebih lanjut tentang System.Web.Security namespace, lihat berikut Microsoft .NET Framework Dokumentasi referensi:
System.Web.Security Namespace
.aspx http://msdn2.Microsoft.com/en-US/Library/System.web.Security (vs.71)
Untuk informasi lebih lanjut tentang ASP.NET konfigurasi, lihat Artikel panduan berikut Microsoft .NET Framework pengembang:
ASP.NET konfigurasi
.aspx http://msdn2.Microsoft.com/en-US/Library/aa719558 (VS.71)

Bagian konfigurasi ASP.NET
.aspx http://msdn2.Microsoft.com/en-US/Library/w7w4sb0w (vs.71)
Untuk informasi tentang pedoman keamanan ASP.NET, merujuk kepada kertas putih MSDN berikut:
Otentikasi di ASP.NET: bimbingan keamanan .NET
http://msdn2.Microsoft.com/en-US/Library/ms978378.aspx

Properti

ID Artikel: 301240 - Kajian Terakhir: 15 November 2012 - Revisi: 3.0
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 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

Berikan Masukan

 

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