Bagaimana menerapkan otentikasi berbasis bentuk di ASP.NET aplikasi dengan menggunakan Visual Basic .NET

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

Pada Halaman ini

Ringkasan

Artikel ini menunjukkan bagaimana menerapkan berbasis bentuk 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
  • Microsoft SQL Server
  • Microsoft Internet Information Services (IIS) versi 5.0 atau yang lebih baru

Membuat aplikasi ASP.NET menggunakan Visual Basic .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 bagaimana untuk menambahkan dan mengubah <authentication></authentication> dan <authorization></authorization> bagian konfigurasi untuk mengkonfigurasi aplikasi ASP.NET menggunakan otentikasi berbasis bentuk.
  1. Dalam solusi Explorer, buka berkas Web.config.
  2. Mengubah modus otentikasi ke bentuk.
  3. Masukkan <Forms>tag, dan isi yang sesuai atribut. (Untuk informasi selengkapnya tentang atribut ini, lihat MSDN dokumentasi atau dokumentasi QuickStart yang tercantum dalam </Forms>REFERENSI Bagian.) kopi karbon kode berikut, dan kemudian klik pasta sebagai HTML pada mengedit menu untuk menyisipkan kode dalam <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 Daftar Tabel Database contoh untuk menyimpan rincian 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. Dari Windows mulai menu, klik menjalankan, dan kemudian ketik Notepad untuk membuka Notepad.
  2. Sorot kode skrip SQL berikut, klik kanan-atas kode, dan kemudian klik Salin. Pada Notepad, klik Paste pada mengedit menu untuk paste kode berikut:
    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. Hal ini menciptakan Daftar Tabel users sampel dan populates Daftar Tabel dalam database pub untuk digunakan dengan sampel ini aplikasi.

Buat halaman log masuk.aspx

  1. Tambahkan formulir Web baru untuk proyek yang dinamai log masuk.aspx.
  2. Buka halaman log masuk.aspx di editor, dan beralih ke HTML Lihat.
  3. Salin kode berikut, dan menggunakan opsi Paste HTML 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 memberikan bentuk log masuk pengguna sehingga mereka dapat memberikan Nama pengguna dan password untuk log on ke aplikasi mereka.
  4. Beralih ke tampilan desain, dan Simpan halaman.

Kode Pengangan kejadian sehingga ini memvalidasi kredensial pengguna

Bagian ini menyajikan kode yang ditempatkan di kode-belakang Halaman (Logon.aspx.vb).
  1. Buka log masuk.aspx.vb file.
  2. Impor namespaces diperlukan dalam kode-file di belakang:
    Imports System.Data.SqlClient
    Imports System.Web.Security
    					
  3. Membuat fungsi ValidateUser untuk memvalidasi kredensial pengguna dengan melihat database. (Pastikan bahwa Anda mengubah koneksi string untuk menunjuk ke Anda database.)
    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. 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 sesuai dengan 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 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
      						
    • Menghasilkan otentikasi tiket, mengenkripsi itu, membuat cookie, menambahkannya ke respon, dan mengarahkan ulang pengguna. Ini memberi Anda lebih banyak kontrol di bagaimana Anda membuat cookie. Anda juga dapat menyertakan data custom sepanjang dengan FormsAuthenticationTicket dalam kasus ini.
      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
      						

Buat halaman Default.aspx

Bagian ini menciptakan halaman pengujian yang pengguna diarahkan setelah mereka melakukan otentikasi. Jika pengguna telusuri paling detail Halaman ini tanpa pertama log on untuk aplikasi, mereka diarahkan ke halaman log masuk.
  1. Mengubah nama halaman WebForm1.aspx yang ada sebagai Default.aspx, dan membukanya dalam editor.
  2. Beralih ke tampilan HTML, dan menyalin 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 Simpan halaman.
  4. Impor namespaces diperlukan dalam kode-file di belakang:
    Imports System.Web.Security
    					
  5. Terbuka di belakang kode halaman (Default.aspx.vb), dan kopi karbon kode berikut di cmdSignOut_ServerClick event handler:
    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. Simpan dan mengkompilasi proyek. Anda sekarang dapat menggunakan aplikasi.

Pemecahan masalah

  • Anda mungkin ingin menyimpan sandi aman dalam database. Anda dapat menggunakan fungsi FormsAuthentication kelas 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 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 log masuk. Jika pengguna tidak dapat masuk dalam jumlah tertentu upaya, Anda mungkin ingin mengatur bendera database untuk mengizinkan pengguna untuk log on sampai 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 dapat mengambil cookie otentikasi dan berharga lain informasi yang sedang dikirim.
  • Otentikasi berbasis bentuk memerlukan bahwa klien Anda menerima atau mengaktifkan cookies pada browser mereka.
  • 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 server Web tanggapan yang berisi header Set-Cookie, yang kemudian kembali ke pengguna lain. Karena otentikasi berbasis bentuk menggunakan cookie untuk melakukan otentikasi 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 tentang pelaksanaan sederhana berbasis bentuk otentikasi dengan menggunakan <credentials></credentials> bagian untuk menyimpan pengguna dan password, lihat artikel berikut Dalam ASP.NET QuickStart contoh:
Otentikasi berbasis bentuk
http://quickstarts.asp.net/QuickStartv20/Aspnet/Doc/Security/formsauth.aspx
Untuk informasi tentang menerapkan otentikasi berbasis bentuk oleh menggunakan file Extensible Markup Language (XML) untuk menyimpan pengguna dan password, Lihat topik berikut dalam .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, lihat artikel berikut dalam dokumentasi .NET Framework SDK:
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 artikel berikut di .NET Framework SDK Dokumentasi:
.aspx http://msdn2.Microsoft.com/en-US/library/system.web.Security (vs.71)
Untuk informasi lebih lanjut tentang ASP.NET konfigurasi, lihat artikel .NET Framework SDK berikut:
ASP.NET konfigurasi
.aspx http://msdn2.Microsoft.com/en-US/Library/aa719558 (VS.71)

ASP.NET konfigurasi bagian
.aspx http://msdn2.Microsoft.com/en-US/Library/w7w4sb0w (vs.71)
Untuk informasi tentang pedoman keamanan ASP.NET, lihat berikut MSDN white paper:
Otentikasi di ASP.NET: bimbingan keamanan .NET
http://msdn2.Microsoft.com/en-US/Library/ms978378.aspx
Untuk informasi lebih lanjut, lihat buku-buku berikut:
Esposito, Dino. Solusi Web bangunan dengan ASP.NET dan ADO.NET. Microsoft Press, 2001.

Howard, Michael dan David LeBlanc. Menulis kode aman. Microsoft Press, 2001.

Properti

ID Artikel: 308157 - Kajian Terakhir: 28 Juni 2013 - Revisi: 3.0
Berlaku bagi:
  • 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
Kata kunci: 
kbproductlink kbconfig kbhowtomaster kbsecurity kbweb kbmt KB308157 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.
Klik disini untuk melihat versi Inggris dari artikel ini: 308157

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