Makale numarası: 301240 - Son Gözden Geçirme: 13 Mayıs 2007 Pazar - Gözden geçirme: 7.11

C# .NET kullanarak uygulamanızı ASP.NET'in Form tabanlı kimlik doğrulama gerçekleştir nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu makalede, kullanıcıların depolamak için bir veritabanı kullanarak form tabanlı kimlik doğrulaması uygulamak gösterilmiştir.

Gereksinimler

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft Visual Studio. NET'i
  • Microsoft ınternet ınformation Services (IIS) 5.0 veya sonraki sürümü
  • Microsoft SQL Server

C# .NET kullanarak bir ASP.NET uygulaması oluşturma

  1. Visual Studio. NET'i açın.
  2. Yeni bir ASP.NET Web uygulaması yaratın ve adını ve konumunu belirtin.

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

Bu bölüm, eklemek ve <authentication>değiştirmek gösterilmiştir ve <authorization> ASP.NET uygulaması, form tabanlı kimlik doğrulamasını kullanacak biçimde yapılandırmak için yapılandırma bölümü.
  1. Solution Explorer'da Web.config dosyasını açın.
  2. Kimlik doğrulama modu form olarak değiştirin.
  3. <forms>Etiketi eklemek ve uygun özniteliklerini doldurun. (Bu öznitelikleri hakkında daha fazla bilgi için MSDN için başvuru belgelerine veya listelenen QuickStart belgelereREFERENCES bölümünde.) Aşağıdaki kodu kopyalayın ve HTML olarak Yapıştır kodu içinde <authentication>yapıştırmak için Düzen menüsünden i dosyanın bir bölümünü:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. <authorization>Anonim kullanıcı erişimi reddedin. gibi bölüm:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Depo kullanıcı ayrıntıları için örnek bir veritabanı tablosu oluştur

Bu bölüm, kullanıcı adı, parola ve kullanıcı rolünü depolamak için bir örnek veritabanı oluşturulması gösterilmiştir. Kullanıcı rollerini veritabanında depolamak ve rol tabanlı güvenliği uygulamak istediğiniz rolü sütun gerekir.
  1. Başlat menüsünde Çalıştır ' ı tıklatın ve sonra da Not Defteri'ni açmak için Not Defteri yazın.
  2. Aşağıdaki SQL komut dosyası kodunu vurgulayın kodunu sağ tıklatın ve sonra Kopyala ' yı tıklatın. Not Defteri'nde, aşağıdaki kodu yapıştırın için Düzen menüsünden Yapıştır ':
    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. Microsoft SQL Server bilgisayarında, Query Analyzer'da Users.sql'ni açın. Veritabanlarının listesinden pubs ' ı tıklatın ve komut dosyasını çalıştırın. Bu örnek, kullanıcıların bir tablo oluşturur ve bu Örnek uygulamayla kullanılmak üzere pubs veritabanındaki tablo doldurur.

Bir Logon.aspx sayfasına oluşturma

  1. Yeni bir Web formu Logon.aspx adlı projeye ekleyin.
  2. Logon.aspx sayfasına Düzenleyicisi içinde açın ve geçiş yapmak için HTML görüntüleme.
  3. Aşağıdaki kodu kopyalayın ve kod <form>etiketleri arasına eklemek için Düzen menüsünde <a2>HTML olarak Yapıştır</a2> seçeneğini kullanın:
    <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 formu, böylece kullanıcı adlarını ve parolalarını, uygulamaya oturum sağlayabilir, bir oturum açma formu kullanıcılarına sunmak için kullanılır.
  4. Tasarım görünümüne geçiş yapın ve sayfayı kaydedin.

It kullanıcı kimlik doğrulama kullanan biçimde olay işleyicisine kod

Bu bölüm arka planda kodlama sayfasında (Logon.aspx.cs) veren kodunu gösterir.
  1. Logon Logon.aspx.cs dosyayı açmak için çift tıklatın.
  2. Gereken ad alanlarını kodu - dosya arkasında alma:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Veritabanında arama yaparak, kullanıcı kimlik bilgilerini doğrulamak için ValidateUser bir işlev oluşturun. (Bağlantı dizesi veritabanınıza işaret edecek biçimde değiştirin dikkat edin).
    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. Form kimlik doğrulama tanımlama bilgisi oluşturabilir ve kullanıcıyı cmdLogin_ServerClick olay uygun bir sayfaya yeniden yönlendirmek için iki yöntemden birini kullanabilirsiniz. Her iki senaryo için örnek kodu sağlanır. Kendisine göre gereksinimin birini kullanın.
    • Otomatik olarak form kimlik doğrulama tanımlama bilgisi oluşturabilir ve kullanıcıyı cmdLogin_ServerClick olay uygun bir sayfaya yeniden yönlendirmek için RedirectFromLoginPage yöntemini çağırı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);
      }
      						
    • Kimlik doğrulama bileti oluşturmak şifrelemeden, tanımlama bilgisi oluşturmak, yanıt eklemek ve kullanıcının yeniden yönlendirin. Bu tanımlama bilgisi nasıl oluşturacağınız, daha fazla denetim sağlar. Özel veri FormsAuthenticationTicket birlikte bu durumda de ekleyebilirsiniz.
      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. Aşağıdaki kodu Web Form tasarımcısının oluşturduğu kodu ınitializecomponent yöntemini eklendiğini doğrulayın:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Default.aspx bir sayfa oluşturun.

Bu bölüm, kimlik doğrulaması sonra kullanıcılar yönlendirilir bir sınama sayfası oluşturur. Bunlar, kullanıcıların uygulamayı ilk oturum açma olmadan bu sayfaya göz atarsanız, oturum açma sayfasına yönlendirilir.
  1. Varolan WebForm1.aspx sayfası default.aspx olarak yeniden adlandırın ve Düzenleyicisi içinde açın.
  2. HTML görünümüne geçin ve <form>etiketleri arasında aşağıdaki kodu kopyalayın:
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Bu düğme, form kimlik doğrulaması oturum oturum açmak için kullanılır.
  3. Tasarım görünümüne geçiş yapın ve sayfayı kaydedin.
  4. Gereken ad alanlarını kodu - dosya arkasında alma:
    using System.Web.Security;
    					
  5. SignOut (Default.aspx.cs) arka planda kodlama sayfayı açmak için çift tıklatın ve aşağıdaki kodu cmdSignOut_ServerClick olay işleyicisinde kopyalayın:
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Aşağıdaki kodu Web Form tasarımcısının oluşturduğu kodu ınitializecomponent yöntemini eklendiğini doğrulayın:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Kaydetmek ve projeyi derleyin. Uygulama artık kullanabilirsiniz.

Ek notlar

  • Parolaları güvenli bir veritabanında saklamak isteyebilirsiniz. FormsAuthentication sınıf yardımcı program işlevi HashPasswordForStoringInConfigFile adlı, veritabanı veya yapılandırma dosyasında depolamak için önce parolaları şifrelemek için kullanabilirsiniz.
  • Kolayca gerekirse değiştirebilirsiniz yapılandırma dosyasının (Web.config) SQL bağlantı bilgilerini saklamak isteyebilirsiniz.
  • Oturum açma farklı birleşimlerini parolaları kullanmaya çalışan önlemek için bir kod ekleyerek düşünebilirsiniz. Örneğin, yalnızca iki veya üç oturum açma girişimini kabul eden mantık içerebilir. Kullanıcının belirli sayıda girişim içinde oturum açamıyor, farklı bir sayfasını ziyaret ettiğinizde veya destek hattınızın çağırarak, kullanıcının hesabını sağlayana kadar oturum açan kullanıcıya izin vermek veritabanındaki bir bayrak ayarlamak isteyebilirsiniz. Buna ek olarak, uygun hata işleme gerekli olan her yerde eklemeniz gerekir.
  • Kullanıcı kimlik doğrulama tanımlama bilgisini alarak tanımlandığından, böylece kimlik doğrulama tanımlama bilgisini ve aktarılmasına neden diğer önemli bilgileri hiç kimseye deceive, bu uygulamayı Güvenli Yuva Katmanı (SSL) kullanmayı düşünebilirsiniz.
  • Istemciniz kabul veya üzerinde kendi tarayıcı tanımlama bilgilerini etkinleştirmek, form tabanlı kimlik doğrulaması gerektirir.
  • <authentication><a1>Zaman aşımı</a1> parametresi yapılandırma bölümü, kimlik doğrulama tanımlama bilgisini yeniden aralığı denetler. Daha iyi performans ve güvenlik sağlayan bir değer seçebilirsiniz.
  • Belirli bir ara proxy'ler ve Internet önbelleğine sonra farklı bir kullanıcı için döndürülen set-Cookie üstbilgiler içeren bir Web sunucusu yanıtları önbelleğe. Form tabanlı kimlik doğrulaması, kullanıcıların kimliklerini doğrulamak için bir tanımlama bilgisi kullandığından, bu kullanıcıların yanlışlıkla (veya kasıtlı olarak) ara proxy veya başlangıçta için tasarlanmıştır. önbellek bir tanımlama bilgisi alma başka bir kullanıcının özelliklerini almasına neden olabilir.

Referanslar

<credentials>Kullanan basit form tabanlı kimlik doğrulaması uygulamak hakkında daha fazla bilgi için bölümünde, kullanıcılar ve parolaları depolamak için aşağıdaki GotDotNet ASP.NET QuickStart örneği için bakın:
Form tabanlı kimlik doğrulaması
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx (http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx)
Kullanıcılar ve parolaları depolamak için bir XML dosyası kullanan form tabanlı kimlik doğrulaması uygulamak hakkında daha fazla bilgi için aşağıdaki konuda, .NET Framework Software Development Kit'e (SDK) başvurun belgeler:
Bir <a0>XML</a0> kullanıcıları dosyasını kullanarak, form kimlik doğrulaması
http://msdn2.microsoft.com/en-us/library/1b1y85bh(vs.71).aspx (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 aşağıdaki Microsoft .NET Framework geliştirici için başvuru belgelerine Kılavuzu:
ASP.NET Web uygulaması güvenliği
http://msdn2.microsoft.com/en-us/library/330a99hc(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/330a99hc(vs.71).aspx)
System.Web.Security ad boşluğu hakkında daha fazla bilgi için aşağıdaki Microsoft .NET Framework için başvuru belgelerine başvuru:
System.Web.Security ad alanı
http://msdn2.microsoft.com/en-us/library/system.web.security(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.web.security(vs.71).aspx)
ASP.NET yapılandırma hakkında daha fazla bilgi için aşağıdaki Microsoft .NET Framework Geliştirici Kılavuzu makalelerine bakın:
ASP.NET yapılandırma
http://msdn2.microsoft.com/en-us/library/aa719558(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa719558(VS.71).aspx)

ASP.NET yapılandırma bölümler
http://msdn2.microsoft.com/en-us/library/w7w4sb0w(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/w7w4sb0w(vs.71).aspx)
ASP.NET'in güvenlik yönergeleri hakkında daha fazla bilgi için aşağıdaki MSDN teknik incelemeye bakın:
ASP.NET'te kimlik doğrulama: .NET güvenlik kılavuzu
http://msdn2.microsoft.com/en-us/library/ms978378.aspx (http://msdn2.microsoft.com/en-us/library/ms978378.aspx)
ASP.NET hakkında daha fazla genel bilgi için aşağıdaki MSDN haber grubuna bakın:
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)

Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbconfig kbhowtomaster kbsecurity kbweb KB301240 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:301240  (http://support.microsoft.com/kb/301240/en-us/ )