Visual Basic .NET kullanarak ASP.NET uygulamanızın form tabanlı kimlik doğrulaması uygulamak nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 308157 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, form tabanlı uygulama gösterilmektedir. Kullanıcılar depolamak için bir veritabanı kullanarak kimlik doğrulaması.

Gereksinimler

Aşağıdaki listede önerilen donanım, yazılım önerilmektedir, ağ altyapısı ve gereken hizmet paketleri:
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server
  • Microsoft Internet Information Services (IIS) sürüm 5.0 veya sonraki bir sürümü

Visual Basic .NET kullanarak bir ASP.NET uygulaması oluşturma

  1. Visual Studio .NET açın.
  2. Yeni bir ASP.NET Web uygulaması oluşturun ve adını belirtin ve konumu.

Web.config dosyasında güvenlik ayarlarını yapılandırma

Bu bölüm eklemek ve değiştirmek nasıl gösterir <authentication></authentication> ve <authorization></authorization> ASP.NET uygulamasını yapılandırmak için yapılandırma bölümleri Form tabanlı kimlik doğrulamasını kullanın.
  1. Solution Explorer'da, Web.config dosyasını açın.
  2. Kimlik doğrulama modu formolarak değiştirin.
  3. <Forms>Etiket eklemek ve uygun doldurmak öznitelikler. (Bu öznitelikler hakkında daha fazla bilgi için MSDN'ye bakın belgelere veya listelenen QuickStart belgeleri </Forms>REFERANSLAR bölüm.) Kopyala aşağıdaki koda ve sonra kodu yapıştırmak için Düzen menüsünden HTML olarak Yapıştır ' ı tıklatın <authentication></authentication> dosyası bölümü:
    <authentication mode="Forms">
    	<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    	protection="All" path="/" timeout="30" />
    </authentication>
    					
  4. Anonim kullanıcı erişimini <authorization></authorization> bölümü aşağıdaki gibi:
    <authorization>
    	<deny users ="?" />
    	<allow users = "*" />
    </authorization>
    					

Kullanıcılar ayrıntıyı depolayabilmek için örnek veritabanı tablosu oluşturma

Bu bölümde örnek veritabanına nasıl oluşturulduğu gösterilmektedir. Kullanıcı adı, parola ve kullanıcılar için rol depolar. Rol sütun gerekir Kullanıcı rolleri veritabanında depolamak ve uygulamak rol tabanlı isterseniz Güvenlik.
  1. Windows Başlat menüsünden Çalıştır' ı tıklatın ve sonra yazın Not defteri açmak için Not Defteri.
  2. Aşağıdaki SQL komut dosyası kodunu seçin, sağ tıklatın kod ve Kopyala' yı tıklatın. Not Defteri'nde, aşağıdaki kodu yapıştırmak için Düzen menüsünden Yapıştır ' ı tıklatın:
    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. Dosyayı Users.sql kaydedin.
  4. Users.sql'de Microsoft SQL Server bilgisayarda açmak Sorgu Çözümleyicisi. Veritabanları listesinden pubstıklatın ve komut dosyasını çalıştırın. Bu örnek bir kullanıcı tablosu oluşturur ve Bu örnek ile kullanılmak üzere Pubs veritabanındaki tablo doldurur uygulama.

Logon.aspx sayfa oluşturma

  1. Adlı projeye yeni bir Web formu ekleyin Logon.aspx.
  2. Logon.aspx sayfasına düzenleyicisinde açın ve HTML biçimine geçiş görüntüleyin.
  3. Aşağıdaki kodu kopyalayın ve arasında kod eklemek için Düzen menüsünden HTML olarak Yapıştır seçeneğini kullanın<form>etiketler: </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" />
    						
    Bu Web Form onlar böylece bir oturum açma formu sunmak için kullanılır. kullanıcı adlarını ve uygulamada oturum açmak için parola sağlayın.
  4. Tasarım görünümüne geçiş yapın ve sayfayı kaydedin.

Kullanıcı kimlik bilgilerini doğrular, olay işleyicisini kod

Bu bölüm, arka plan kod içinde yerleştirilir kodu verir Sayfa (Logon.aspx.vb).
  1. Logon.aspx.vb dosyasını açın.
  2. Arka plan kod dosyasındaki gerekli isim uzaylarını içeri aktarın:
    Imports System.Data.SqlClient
    Imports System.Web.Security
    					
  3. Bakarak kullanıcı kimlik bilgilerini doğrulamak için ValidateUser işlevi oluşturma Veritabanı. (İşaret etmek için bağlantı dizesi değiştirdiğinizden emin olun, Veritabanı.)
    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. Formları oluşturmak için iki yöntemden birini kullanabilirsiniz kimlik doğrulama tanımlama bilgisi ve yeniden yönlendirme kullanıcı için uygun bir sayfa cmdLogin_ServerClick olay. Her iki senaryo için örnek kod sağlanmıştır. Birini kullanın bunları gereksinimlerinize göre.
    • Formlar kimlik doğrulama tanımlama bilgisini otomatik olarak oluşturmak için RedirectFromLoginPage yöntemi çağırma ve kullanıcı cmdLogin_ServerClick olay uygun bir sayfaya yönlendirin:
      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
      						
    • Kimlik doğrulama bileti oluşturur, şifrelemeden, oluşturma bir tanımlama bilgisi yanıtı ekleyin ve kullanıcıyı yeniden yönlendirmek. Bu size daha fazla bilgi sağlar tanımlama bilgisinin nasıl oluşturacağınızı de kontrol eder. Özel veri boyunca da dahil edebilirsiniz FormsAuthenticationTicket ile bu durumda.
      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
      						

Default.aspx sayfasını oluşturma

Bu bölümde, kullanıcıların yeniden yönlendirilen bir sınama sayfası oluşturur sonra da kimlik doğrulaması. Kullanıcı ilk oturum açma olmadan bu sayfasına göz atarsanız uygulama için bunlar oturum açma sayfasına yönlendirilir.
  1. Default.aspx olarak varolan WebForm1.aspx sayfasını yeniden adlandırma ve düzenleyicide açın.
  2. HTML görünümüne geçin ve arasında aşağıdaki kodu kopyalayın ,<form>etiketler: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Bu düğme, forms kimlik doğrulaması oturum için kullanılır oturum.
  3. Tasarım görünümüne geçiş yapın ve sayfayı kaydedin.
  4. Arka plan kod dosyasındaki gerekli isim uzaylarını içeri aktarın:
    Imports System.Web.Security
    					
  5. Açık arka plan kod sayfası (Default.aspx.vb) ve kopyalama cmdSignOut_ServerClick olay işleyicisine aşağıdaki kodu:
    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. Kaydet ve projeyi derleyin. Şimdi kullanabilirsiniz uygulama.

Sorun giderme

  • Parolaları güvenli bir veritabanında depolamak isteyebilirsiniz. , FormsAuthentication sınıfı yardımcı program işlevi HashPasswordForStoringInConfigFile adlı veritabanına depolamadan önce parolaları şifrelemek için kullanabilirsiniz veya yapılandırma dosyası.
  • SQL bağlantı bilgilerini depolamak isteyebilirsiniz. yapılandırma dosyası (Web.config) böylece kolayca varsa değiştirebilirsiniz gerekli.
  • Deneyin korsanları engellemek üzere kod ekleyerek düşünün oturum açma farklı birleşimlerini parolalar kullanın. Örneğin, şunları yapabilirsiniz yalnızca iki veya üç oturum açma girişimlerini kabul eden bir mantığa sahiptir. Kullanıcı çalıştıramıyorsanız belirli sayıda girişim içinde oturum açma, bayrak kümesinde isteyebilirsiniz Bu kullanıcının kendi sağlayana kadar oturum açmak kullanıcının izin vermeyecek şekilde veritabanı Hesap, destek hattını arayarak veya farklı bir sayfa ziyaret tarafından. İçinde Ayrıca, uygun hata eklemeniz yerlerde işleme gerekli.
  • Kullanıcı kimlik doğrulamasına göre tanımlandığından tanımlama bilgisi, bu nedenle bu uygulama Güvenli Yuva Katmanı (SSL) kullanmak isteyebilirsiniz başka birinin kimlik doğrulama tanımlama bilgisi ve diğer bir değerli alabilirsiniz bilgi aktarılıyor.
  • Form tabanlı kimlik doğrulaması, istemci kabul etmenizi gerektiriyor veya kendi tarayıcı tanımlama bilgilerini etkinleştirin.
  • Zaman aşımı parametresi <authentication></authentication> yapılandırma bölümünde hangi aralıklarla denetler kimlik doğrulama tanımlama bilgisini yeniden oluşturulur. Sağlayan bir değer seçebilirsiniz. daha iyi performans ve güvenlik.
  • Belirli bir ara proxy'ler ve Internet'te önbellekleri olabilir Daha sonra Set-Cookie üstbilgileri içeren Web sunucu yanıtlarının önbelleğe farklı bir kullanıcıya döndürdü. Form tabanlı kimlik doğrulaması tanımlama bilgisi kullandığından kullanıcıların kimliğini doğrulamak için bu kullanıcıların yanlışlıkla (veya kasıtlı olarak) neden olabilir bir ara proxy sunucudan bir tanımlama bilgisi alarak başka bir kullanıcının kimliğine bürünmek veya onlar için ilk olarak amaçlanmamış önbelleği.

Referanslar

Basit form tabanlı uygulama hakkında bilgi için kimlik doğrulaması kullanarak <credentials></credentials> bölümde kullanıcılar ve parolalar depolamak için aşağıdaki makaleye bakın ASP.NET QuickStart örnekleri:
Form tabanlı kimlik doğrulaması
http://quickstarts.ASP.NET/QuickStartv20/ASPNET/doc/Security/formsauth.aspx
Form tabanlı kimlik doğrulaması uygulama hakkında bilgi için Kullanıcılar ve parolalar depolamak için bir Genişletilebilir Biçimlendirme Dili (XML) dosyası kullanarak, .NET Framework Software Development Kit (SDK) bulunan aşağıdaki konuya bakın belgeler:
Forms kimlik doğrulaması kullanıcıların XML dosyasını kullanma
http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71) .aspx
ASP.NET Web uygulaması güvenliği hakkında daha fazla bilgi için bkz. .NET Framework SDK belgelerinde aşağıdaki makale:
ASP.NET Web uygulaması güvenliği
http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71) .aspx
Aşağıdaki makalede .NET Framework SDK System.Web.Security ad alanı hakkında daha fazla bilgi için bkz: belgeler:
http://msdn2.microsoft.com/en-us/library/System.Web.Security (vs.71) .aspx
ASP.NET Yapılandırması hakkında daha fazla bilgi için bkz. Aşağıdaki .NET Framework SDK makaleleri:
ASP.NET Yapılandırması
http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71) .aspx

ASP.NET yapılandırma bölümleri
http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71) .aspx
ASP.NET güvenlik yönergeleri hakkında daha fazla bilgi için aşağıdakilere bakın MSDN Teknik İnceleme:
ASP.NET kimlik doğrulaması: .NET güvenlik kılavuzu
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
Daha fazla bilgi için aşağıdaki kitaplara bakın:
Esposito, Dino. ASP.NET ve ADO.NET ile Web çözümler oluşturma. Microsoft Press, 2001.

Michael Howard ve David LeBlanc. Güvenli kod yazma. Microsoft Press, 2001.

Özellikler

Makale numarası: 308157 - Last Review: 28 Haziran 2013 Cuma - Gözden geçirme: 9.0
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbproductlink kbconfig kbhowtomaster kbsecurity kbweb kbmt KB308157 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 308157

Geri Bildirim Ver

 

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