Share via


Üyelik Kullanıcı Deposu ile Karşılaştırarak Kullanıcı Kimlik Bilgilerini Doğrulama (VB)

tarafından Scott Mitchell

Not

Bu makale yazıldığından beri, ASP.NET Üyelik sağlayıcılarının yerini ASP.NET Identity alır. Bu makalenin yazıldığı sırada öne çıkan Üyelik sağlayıcıları yerine ASP.NET Kimlik platformunu kullanmak için uygulamaları güncelleştirmenizi kesinlikle öneririz. ASP.NET Identity, ASP.NET Üyelik sistemine göre aşağıdakiler dahil olmak üzere çeşitli avantajlara sahiptir:

  • Daha iyi performans
  • Geliştirilmiş genişletilebilirlik ve test edilebilirlik
  • OAuth, OpenID Connect ve iki öğeli kimlik doğrulaması desteği
  • Talep Tabanlı Kimlik desteği
  • ASP.Net Core ile daha iyi birlikte çalışabilirlik

Kodu İndir veya PDF İndir

Bu öğreticide, hem program aracılığıyla hem de Oturum açma denetimini kullanarak kullanıcının kimlik bilgilerini Üyelik kullanıcı deposuna karşı doğrulamayı inceleyeceğiz. Ayrıca oturum açma denetiminin görünümünü ve davranışını özelleştirmeyi de inceleyeceğiz.

Giriş

Önceki öğreticide Üyelik çerçevesinde yeni bir kullanıcı hesabının nasıl oluşturulacağını inceledik. İlk olarak sınıfın MembershipCreateUser yöntemi aracılığıyla program aracılığıyla kullanıcı hesapları oluşturmaya baktık ve ardından CreateUserWizard Web denetimini kullanarak inceledik. Ancak, oturum açma sayfası şu anda sağlanan kimlik bilgilerini kullanıcı adı ve parola çiftlerinin sabit kodlanmış bir listesiyle doğrular. Üyelik çerçevesinin kullanıcı deposunda kimlik bilgilerini doğrulayacak şekilde oturum açma sayfasının mantığını güncelleştirmemiz gerekir.

Kullanıcı hesapları oluşturma gibi kimlik bilgileri de program aracılığıyla veya bildirim temelli olarak doğrulanabilir. Üyelik API'sinde, kullanıcının kimlik bilgilerini kullanıcı deposunda program aracılığıyla doğrulamaya yönelik bir yöntem bulunur. ASP.NET, kullanıcı adı ve parola için metin kutuları ve oturum açmak için bir düğme içeren bir kullanıcı arabirimi oluşturan Login Web denetimiyle birlikte gelir.

Bu öğreticide, hem program aracılığıyla hem de Oturum açma denetimini kullanarak kullanıcının kimlik bilgilerini Üyelik kullanıcı deposuna karşı doğrulamayı inceleyeceğiz. Ayrıca oturum açma denetiminin görünümünü ve davranışını özelleştirmeyi de inceleyeceğiz. Haydi başlayalım!

1. Adım: Kimlik Bilgilerini Üyelik Kullanıcı Deposunda Doğrulama

Form kimlik doğrulaması kullanan web siteleri için, kullanıcı bir oturum açma sayfasını ziyaret ederek ve kimlik bilgilerini girerek web sitesinde oturum açar. Bu kimlik bilgileri daha sonra kullanıcı deposuyla karşılaştırılır. Geçerliyse, kullanıcıya ziyaretçinin kimliğini ve orijinalliğini belirten bir güvenlik belirteci olan bir form kimlik doğrulama bileti verilir.

Bir kullanıcıyı Üyelik çerçevesine göre doğrulamak için sınıfının ValidateUser yöntemini kullanınMembership. ValidateUser yöntemi iki giriş parametresi username (ve password ) alır ve kimlik bilgilerinin geçerli olup olmadığını belirten bir Boole değeri döndürür. CreateUser Önceki öğreticide incelediğimiz yöntemde olduğu gibi, ValidateUser yöntem de gerçek doğrulamayı yapılandırılan Üyelik sağlayıcısına devreder.

belirtilen SqlMembershipProvider kullanıcının parolasını saklı yordam aracılığıyla aspnet_Membership_GetPasswordWithFormat alarak sağlanan kimlik bilgilerini doğrular. Kullanıcıların parolalarını üç biçimden birini kullanarak depoladığını SqlMembershipProvider hatırlayın: clear, encrypted veya hashed. aspnet_Membership_GetPasswordWithFormat Saklı yordam, parolayı ham biçiminde döndürür. Şifrelenmiş veya karma parolalar password için yöntemine SqlMembershipProviderValidateUser geçirilen değeri eşdeğer şifrelenmiş veya karma durumuna dönüştürür ve ardından veritabanından döndürülen değerle karşılaştırır. Veritabanında depolanan parola, kullanıcı tarafından girilen biçimlendirilmiş parolayla eşleşiyorsa, kimlik bilgileri geçerlidir.

Sağlanan kimlik bilgilerini Üyelik çerçevesi kullanıcı deposunda doğrulayacak şekilde oturum açma sayfamızı (~/Login.aspx) güncelleştirelim. Bu oturum açma sayfasını Form Kimlik Doğrulamasına Genel Bakış öğreticisinde, kullanıcı adı ve parola için iki TextBox ile bir arabirim, Beni Anımsa onay kutusu ve Oturum Aç düğmesi oluşturarak oluşturduk (bkz. Şekil 1). Kod, girilen kimlik bilgilerini kullanıcı adı ve parola çiftlerinin (Scott/password, Jisun/password ve Sam/password) sabit kodlanmış bir listesine göre doğrular.

Oturum Açma Sayfasının Arabiriminde İki Metin Kutusu, Bir CheckBoxList ve Bir Düğme Bulunur

Şekil 1: Oturum Açma Sayfasının Arabirimi İki TextBox, bir CheckBoxList ve Bir Düğme içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Oturum açma sayfasının kullanıcı arabirimi değişmeden kalabilir, ancak Oturum Aç düğmesinin Click olay işleyicisini kullanıcıyı Üyelik çerçevesi kullanıcı deposuna karşı doğrulayan kodla değiştirmemiz gerekir. Olay işleyicisini, kodunun aşağıdaki gibi görünmesi için güncelleştirin:

Protected Sub LoginButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginButton.Click

 ' Validate the user against the Membership framework user store
 If Membership.ValidateUser(UserName.Text, Password.Text) Then
 ' Log the user into the site
 FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked)
 End If
    
 ' If we reach here, the user's credentials were invalid
 InvalidCredentialsMessage.Visible = True
End Sub

Bu kod son derece basittir. Sağlanan kullanıcı adını ve parolayı Membership.ValidateUser geçirerek yöntemini çağırarak başlayacağız. Bu yöntem True döndürürse, kullanıcı sınıfın FormsAuthentication RedirectFromLoginPage yöntemi aracılığıyla sitede oturum açar. (Daha önce de belirttiğimiz gibiForms Kimlik Doğrulamasına Genel Bakış öğreticisi, FormsAuthentication.RedirectFromLoginPage forms kimlik doğrulama biletini oluşturur ve kullanıcıyı uygun sayfaya yönlendirir.) Ancak kimlik bilgileri geçersizse Etiket InvalidCredentialsMessage görüntülenir ve kullanıcıya kullanıcı adının veya parolasının yanlış olduğu bildirilir.

İşte bu kadar!

Oturum açma sayfasının beklendiği gibi çalışıp çalışmadığını test etmek için, önceki öğreticide oluşturduğunuz kullanıcı hesaplarından biriyle oturum açmayı deneyin. Ya da henüz bir hesap oluşturmadıysanız sayfadan ~/Membership/CreatingUserAccounts.aspx bir hesap oluşturun.

Not

Kullanıcı kimlik bilgilerini girip oturum açma sayfası formunu gönderdiğinde, parolası da dahil olmak üzere kimlik bilgileri İnternet üzerinden web sunucusuna düz metin olarak iletilir. Bu, ağ trafiğini koklayan tüm korsanların kullanıcı adını ve parolayı görebileceği anlamına gelir. Bunu önlemek için Güvenli Yuva Katmanları (SSL) kullanarak ağ trafiğini şifrelemek önemlidir. Bu, kimlik bilgilerinin (ve sayfanın HTML işaretlemesinin tamamının) tarayıcıdan ayrıldığı andan web sunucusu tarafından alınana kadar şifrelenmesini sağlar.

Üyelik Çerçevesi Geçersiz Oturum Açma Girişimlerini nasıl işler?

Bir ziyaretçi oturum açma sayfasına ulaştığında ve kimlik bilgilerini gönderdiğinde, tarayıcıları oturum açma sayfasına bir HTTP isteği gönderir. Kimlik bilgileri geçerliyse, HTTP yanıtı kimlik doğrulama anahtarını bir tanımlama bilgisine ekler. Bu nedenle, sitenize girmeye çalışan bir bilgisayar korsanı, oturum açma sayfasına geçerli bir kullanıcı adı ve parola tahmini ile kapsamlı http istekleri gönderen bir program oluşturabilir. Parola tahmini doğruysa, oturum açma sayfası kimlik doğrulama bileti tanımlama bilgisini döndürür ve bu noktada program geçerli bir kullanıcı adı/parola çifti ile karşılaştığını bilir. Deneme yanılma yoluyla, böyle bir program özellikle de parola zayıfsa kullanıcının parolasına rastlayabilir.

Bu tür deneme yanılma saldırılarını önlemek için Üyelik çerçevesi, belirli bir süre içinde belirli sayıda başarısız oturum açma girişimi olduğunda kullanıcıyı kilitler. Tam parametreler aşağıdaki iki Üyelik sağlayıcısı yapılandırma ayarıyla yapılandırılabilir:

  • maxInvalidPasswordAttempts - Hesap kilitlenmeden önceki süre içinde kullanıcı için kaç geçersiz parola girişimine izin verildiğinden belirler. Varsayılan değer 5'tir.
  • passwordAttemptWindow - Belirtilen sayıda geçersiz oturum açma girişiminin hesabın kilitlenmesine neden olacağı süreyi dakika cinsinden gösterir. Varsayılan değer 10'dur.

Bir kullanıcı kilitlenmişse, yönetici hesabının kilidini açana kadar oturum açamaz. Bir kullanıcı kilitlendiğinde, geçerli kimlik bilgileri sağlansa ValidateUser bile yöntemi her zaman döndürür False. Bu davranış, bir korsanın deneme yanılma yöntemleriyle sitenize girme olasılığını azaltmakla birlikte, parolasını unutmuş veya yanlışlıkla Caps Lock'u açık olan veya kötü bir yazma günü geçiren geçerli bir kullanıcıyı kilitleyebilir.

Ne yazık ki, bir kullanıcı hesabının kilidini açmak için yerleşik bir araç yoktur. Bir hesabın kilidini açmak için veritabanını doğrudan değiştirebilir, uygun kullanıcı hesabının tablosundaki aspnet_Membership alanı değiştirebilir IsLockedOut veya kilitli hesapların kilidini açma seçenekleriyle birlikte listeleyen web tabanlı bir arabirim oluşturabilirsiniz. Gelecekteki bir öğreticide ortak kullanıcı hesabı ve rolle ilgili görevleri gerçekleştirmek için yönetim arabirimleri oluşturmayı inceleyeceğiz.

Not

Yöntemin ValidateUser bir dezavantajı, sağlanan kimlik bilgileri geçersiz olduğunda nedenine ilişkin herhangi bir açıklama sağlamamasıdır. Kullanıcı deposunda eşleşen kullanıcı adı/parola çifti olmadığından veya kullanıcı henüz onaylanmadığından veya kullanıcı kilitlendiğinden kimlik bilgileri geçersiz olabilir. 4. Adımda, oturum açma girişimi başarısız olduğunda kullanıcıya daha ayrıntılı bir iletinin nasıl gösterileceğini göreceğiz.

2. Adım: Oturum Açma Web Denetimi aracılığıyla Kimlik Bilgilerini Toplama

Login Web denetimi, Form Kimlik Doğrulamasına Genel Bakış öğreticisinde oluşturduğumuz kullanıcı arabirimine çok benzer bir varsayılan kullanıcı arabirimi oluşturur. Oturum açma denetimini kullanmak, ziyaretçinin kimlik bilgilerini toplamak için arabirimi oluşturma işini bize kaydeder. Ayrıca, Oturum açma denetimi kullanıcıda otomatik olarak oturum açar (gönderilen kimlik bilgilerinin geçerli olduğu varsayılarak), böylece herhangi bir kod yazmak zorunda kalmamızı engeller.

el ile oluşturulan arabirimi ve kodu bir Oturum açma denetimiyle değiştirerek öğesini güncelleştirelim Login.aspx. içindeki mevcut işaretlemeyi ve kodu Login.aspxkaldırarak başlayın. Doğrudan silebilir veya açıklama satırı yapmanız yeterlidir. Bildirim temelli işaretlemeyi açıklama satırı yapmak için ve --%> sınırlayıcılarıyla <%-- çevreleyebilirsiniz. Bu sınırlayıcıları el ile girebilir veya Şekil 2'de gösterildiği gibi açıklama satırı yapmak için metni seçip Araç Çubuğu'nda Seçili satırları açıklama satırı simgesine tıklayabilirsiniz. Benzer şekilde, arka kod sınıfındaki seçili kodu açıklama satırı yapmak için Seçili satırları açıklama satırına açıklama satırı ekle simgesini kullanabilirsiniz.

Login.aspx'te Var Olan Bildirim temelli Biçimlendirme ve Kaynak Kodu Açıklama Satırı Yapın

Şekil 2: Login.aspx'da Mevcut Bildirim temelli Biçimlendirme ve Kaynak Kodu Açıklama Satırı Yapın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

Visual Studio 2005'te bildirim temelli işaretleme görüntülenirken seçili satırları açıklama satırı simgesi kullanılamaz. Visual Studio 2008 kullanmıyorsanız ve --%> sınırlayıcılarını <%-- el ile eklemeniz gerekir.

Ardından, araç kutusundan bir Oturum açma denetimini sayfaya sürükleyin ve özelliğini olarak myLoginayarlayınID. Bu noktada ekranınız Şekil 3'e benzer görünmelidir. Oturum açma denetiminin varsayılan arabiriminde kullanıcı adı ve parola için TextBox denetimleri, bir sonraki sefere beni anımsa Onay Kutusu ve Oturum Aç Düğmesi yer alır. İki TextBox için denetimler de RequiredFieldValidator vardır.

Sayfaya Oturum Açma Denetimi Ekleme

Şekil 3: Sayfaya Oturum Açma Denetimi Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Ve işimiz bitti! Oturum Açma denetiminin Oturum Aç düğmesine tıklandığında bir geri gönderme gerçekleşir ve Oturum açma denetimi, girilen kullanıcı adı ve parolayı geçirerek yöntemini çağırır Membership.ValidateUser . Kimlik bilgileri geçersizse, Oturum açma denetimi bunu belirten bir ileti görüntüler. Ancak kimlik bilgileri geçerliyse, Oturum açma denetimi forms kimlik doğrulama anahtarını oluşturur ve kullanıcıyı uygun sayfaya yönlendirir.

Oturum açma denetimi, başarılı bir oturum açma işleminin ardından kullanıcıyı yönlendirmek için uygun sayfayı belirlemek için dört faktör kullanır:

  • Oturum açma denetiminin, form kimlik doğrulaması yapılandırmasında ayarlanarak loginUrl tanımlanan şekilde oturum açma sayfasında olup olmadığı; bu ayarın varsayılan değeri Login.aspx
  • Querystring parametresinin ReturnUrl varlığı
  • Oturum açma denetiminin özelliğininDestinationUrl değeri
  • defaultUrl Form kimlik doğrulaması yapılandırma ayarlarında belirtilen değer; bu ayarın varsayılan değeri Default.aspx'dir

Şekil 4'te Oturum Açma denetiminin uygun sayfa kararına ulaşmak için bu dört parametreyi nasıl kullandığı gösterilmektedir.

Oturum açma denetimi, uygun sayfa kararına ulaşmak için dört parametre kullanır.

Şekil 4: Sayfaya Oturum Açma Denetimi Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bir tarayıcı üzerinden siteyi ziyaret ederek ve Üyelik çerçevesinde mevcut bir kullanıcı olarak oturum açarak Oturum açma denetimini test etmek için biraz zaman ayırın.

Oturum açma denetiminin işlenmiş arabirimi yüksek oranda yapılandırılabilir. Görünümünü etkileyen bir dizi özellik vardır; Dahası, kullanıcı arabirimi öğelerinin düzeni üzerinde hassas denetim için Oturum açma denetimi bir şablona dönüştürülebilir. Bu adımın geri kalanında görünümün ve düzenin nasıl özelleştirileceği incelendi.

Oturum Açma Denetiminin Görünümünü Özelleştirme

Oturum açma denetiminin varsayılan özellik ayarları, kullanıcı adı ve parola girişleri için bir başlık ( Oturum Aç ), Metin Kutusu ve Etiket denetimleri, bir sonraki seferde beni anımsa Onay Kutusu ve Oturum Aç düğmesi olan bir kullanıcı arabirimini işler. Bu öğelerin görünümlerinin tümü, Oturum Açma denetiminin çok sayıda özelliği aracılığıyla yapılandırılabilir. Ayrıca, yeni kullanıcı hesabı oluşturmak için bir sayfa bağlantısı gibi ek kullanıcı arabirimi öğeleri, bir veya iki özellik ayarlanarak eklenebilir.

Oturum açma denetimimizin görünümünü daha iyi görmek için birkaç dakika harcayalım. Login.aspx Sayfanın en üstünde Oturum Aç yazan bir metin bulunduğundan, Oturum açma denetiminin başlığı gereksizdir. Bu nedenle, Oturum açma denetiminin TitleText başlığını kaldırmak için özellik değerini temizleyin.

İki TextBox denetiminin sol kısmındaki Kullanıcı Adı: ve Parola: Etiketleri sırasıyla ve PasswordLabelText özellikleri aracılığıyla UserNameLabelText özelleştirilebilir. Şimdi Kullanıcı Adı: Etiket'i Kullanıcı Adı: okunacak şekilde değiştirelim. Label ve TextBox stilleri sırasıyla ve TextBoxStyle özellikleri aracılığıyla LabelStyle yapılandırılabilir.

CheckBox'ın Text özelliğinin Oturum açma denetiminin RememberMeText özelliği aracılığıyla ayarlanabildiği bir sonraki seferde beni anımsa özelliği ve varsayılan denetlenen durumu özelliği aracılığıyla RememberMeSet yapılandırılabilir (varsayılan olarak False olur). Devam edin ve özelliği True olarak ayarlayın RememberMeSet ; böylece CheckBox varsayılan olarak bir sonraki sefer beni hatırla seçeneği işaretlenir.

Oturum açma denetimi, kullanıcı arabirimi denetimlerinin düzenini ayarlamak için iki özellik sunar. özelliği, TextLayout Kullanıcı Adı: ve Parola: Etiketlerinin karşılık gelen TextBox'larının solunda mı (varsayılan) yoksa üstlerinde mi görüneceğini gösterir. özelliği, Orientation kullanıcı adı ve parola girişlerinin dikey (biri diğerinin üstünde) veya yatay olarak yerleştirilip yerleştirılmediğini gösterir. Bu iki özelliği varsayılan değerlerine ayarlı olarak bırakacağım, ancak sonuçta elde edilen etkiyi görmek için bu iki özelliği varsayılan olmayan değerlerine ayarlamayı denemenizi tavsiye ederim.

Not

Sonraki bölümde, Oturum Açma Denetiminin Düzenini Yapılandırma bölümünde, Düzen denetiminin kullanıcı arabirimi öğelerinin tam düzenini tanımlamak için şablonları kullanmayı inceleyeceğiz.

ve CreateUserUrl özelliklerini Henüz kaydedilmedi olarak ayarlayarak Oturum açma denetiminin CreateUserText özellik ayarları sarmalansın mı? Hesap oluşturun! ve ~/Membership/CreatingUserAccounts.aspxsırasıyla . Bu, önceki öğreticide oluşturduğumuz sayfaya işaret eden Oturum Açma denetiminin arabirimine bir köprü ekler. Oturum açma denetiminin HelpPageText ve HelpPageUrl özellikleri ile PasswordRecoveryTextPasswordRecoveryUrl özellikleri aynı şekilde çalışır ve bir yardım sayfasına ve parola kurtarma sayfasına bağlantılar işler.

Bu özellik değişikliklerini yaptıktan sonra, Oturum açma denetiminizin bildirim temelli işaretlemesi ve görünümü Şekil 5'te gösterilene benzer görünmelidir.

Oturum Açma Denetiminin Özelliklerinin Değerleri Görünümünü Dikte Eder

Şekil 5: Oturum Açma Denetimi Özelliklerinin Değerleri Görünümünü Dikte Eder (tam boyutlu görüntüyü görüntülemek için tıklayın)

Oturum Açma Denetiminin Düzenini Yapılandırma

Login Web denetiminin varsayılan kullanıcı arabirimi, arabirimini bir HTML <table>içinde hazırlar. Peki işlenen çıkış üzerinde daha hassas bir denetime ihtiyacımız olursa ne olacak? Belki yerine bir dizi <div> etiket eklemek <table> isteyebiliriz. Ya da uygulamamız kimlik doğrulaması için ek kimlik bilgileri gerektiriyorsa ne olur? Örneğin birçok finansal web sitesi, kullanıcıların yalnızca kullanıcı adı ve parolayı değil, kişisel kimlik numarası (PIN) veya diğer tanımlayıcı bilgileri de sağlamasını gerektirir. Nedenler ne olursa olsun, Oturum açma denetimini, arabirimin bildirim temelli işaretlemesini açıkça tanımlayabildiğimiz bir şablona dönüştürmek mümkündür.

Ek kimlik bilgilerini toplamak üzere Oturum açma denetimini güncelleştirmek için iki şey yapmamız gerekir:

  1. Ek kimlik bilgilerini toplamak için Oturum açma denetiminin arabirimini Web denetimlerini içerecek şekilde güncelleştirin.
  2. Kullanıcının yalnızca kullanıcı adı ve parolası geçerliyse ve ek kimlik bilgileri de geçerliyse kimlik doğrulamasının yapılabilmesi için Oturum açma denetiminin iç kimlik doğrulama mantığını geçersiz kılın.

İlk görevi gerçekleştirmek için Oturum açma denetimini şablona dönüştürmemiz ve gerekli Web denetimlerini eklememiz gerekir. İkinci göreve gelince, denetimin olayı için bir olay işleyicisi oluşturularak Oturum açma denetiminin Authenticatekimlik doğrulama mantığının yerini alabilir.

Oturum açma denetimini, kullanıcılardan kullanıcı adlarını, parolalarını ve e-posta adreslerini isteyecek ve yalnızca sağlanan e-posta adresi dosyadaki e-posta adresleriyle eşleşiyorsa kullanıcının kimliğini doğrulayan şekilde güncelleştirelim. Öncelikle Oturum açma denetiminin arabirimini bir şablona dönüştürmemiz gerekir. Oturum açma denetiminin Akıllı Etiketi'nden Şablona dönüştür seçeneğini belirleyin.

Oturum Açma Denetimini Şablona Dönüştürme

Şekil 6: Oturum Açma Denetimini Şablona Dönüştürme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

Oturum açma denetimini şablon öncesi sürümüne geri döndürmek için denetimin Akıllı Etiketi'nden Sıfırla bağlantısına tıklayın.

Oturum açma denetimini şablona dönüştürmek, denetimin bildirim temelli işaretlemesine HTML öğeleri ve kullanıcı arabirimini tanımlayan Web denetimleri ile ekler LayoutTemplate . Şekil 7'de gösterildiği gibi, denetimi şablona dönüştürmek, Özellikler penceresi , vb. gibi TitleTextCreateUserUrlbir dizi özelliği kaldırır, çünkü bu özellik değerleri şablon kullanılırken yoksayılır.

Oturum Açma Denetimi Şablona Dönüştürüldüğünde Daha Az Özellik Kullanılabilir

Şekil 7: Oturum Açma Denetimi Şablona Dönüştürüldüğünde Daha Az Özellik Kullanılabilir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

içindeki LayoutTemplate HTML işaretlemesi gerektiğinde değiştirilebilir. Benzer şekilde, şablona yeni Web denetimleri de ekleyebilirsiniz. Ancak, Oturum açma denetiminin temel Web denetimlerinin şablonda kalması ve atanmış ID değerlerini tutması önemlidir. Özellikle, veya Password TextBoxes, CheckBox, RememberMe Button, FailureTextLoginButton Label veya denetimleri kaldırmayın veya RequiredFieldValidator yeniden adlandırmayınUserName.

Ziyaretçinin e-posta adresini toplamak için şablona bir TextBox eklememiz gerekir. TextBox'ı içeren tablo satırı (<tr>) ile Beni bir sonraki sefer hatırla Onay Kutusu'nu Password tutan tablo satırı () arasına aşağıdaki bildirim temelli işaretlemeyi ekleyin:

<tr>
 <td align="right">
 <asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">Email:</asp:Label>
 </td>
 <td>
 <asp:TextBox ID="Email" runat="server"></asp:TextBox>
 <asp:RequiredFieldValidator ID="EmailRequired" runat="server"
 ControlToValidate="Email" ErrorMessage="Email is required."
 ToolTip="Email is required." ValidationGroup="myLogin">*</asp:RequiredFieldValidator>
 </td>
</tr>

TextBox'ı Email ekledikten sonra sayfayı tarayıcı üzerinden ziyaret edin. Şekil 8'de gösterildiği gibi, Oturum açma denetiminin kullanıcı arabirimi artık üçüncü bir metin kutusu içerir.

Oturum Açma Denetimi Artık Kullanıcının Email Adresi İçin Bir Metin Kutusu Içeriyor

Şekil 8: Oturum Açma Denetimi Artık Kullanıcının Email Adresi için Bir Metin Kutusu Içeriyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu noktada, Oturum açma denetimi sağlanan kimlik bilgilerini doğrulamak için yöntemini kullanmaya Membership.ValidateUser devam eder. Buna karşılık, TextBox'a girilen değerin Email kullanıcının oturum açıp açamayacağıyla ilgisi yoktur. 3. Adımda, kimlik bilgilerinin yalnızca kullanıcı adı ve parola geçerliyse ve sağlanan e-posta adresi dosyadaki e-posta adresiyle eşleşiyorsa geçerli olarak kabul edilmesi için Oturum açma denetiminin kimlik doğrulama mantığını nasıl geçersiz kılacağımıza bakacağız.

3. Adım: Oturum Açma Denetiminin Kimlik Doğrulama Mantığını Değiştirme

Bir ziyaretçi kimlik bilgilerini sağladığında ve Oturum Aç düğmesine tıkladığında, bir geri gönderme başlatılır ve Oturum açma denetimi kimlik doğrulaması iş akışında ilerler. İş akışı, olayı yükselterek LoggingInbaşlar. Bu olayla ilişkili tüm olay işleyicileri özelliğini Trueolarak ayarlayarak e.Cancel oturum açma işlemini iptal edebilir.

Oturum açma işlemi iptal edilmediyse, iş akışı olayı yükselterek Authenticateilerler. Olay için Authenticate bir olay işleyicisi varsa, sağlanan kimlik bilgilerinin geçerli olup olmadığını belirlemek bu durumdan sorumludur. Hiçbir olay işleyicisi belirtilmezse, Oturum açma denetimi kimlik bilgilerinin geçerliliğini belirlemek için yöntemini kullanır Membership.ValidateUser .

Sağlanan kimlik bilgileri geçerliyse form kimlik doğrulama bileti oluşturulur, LoggedIn olay oluşturulur ve kullanıcı uygun sayfaya yönlendirilir. Ancak kimlik bilgileri geçersiz kabul edilirse olayLoginError tetiklenir ve kullanıcıya kimlik bilgilerinin geçersiz olduğunu bildiren bir ileti görüntülenir. Varsayılan olarak, hata durumunda Oturum Açma denetimi yalnızca Etiket denetiminin Text özelliğini bir hata iletisine ayarlar FailureText ( Oturum açma girişiminiz başarılı değildi. Lütfen yeniden deneyin). Ancak, Oturum açma denetiminin FailureAction özelliği olarak RedirectToLoginPageayarlanırsa, Oturum açma denetimi querystring parametresini loginfailure=1 ekleyerek oturum açma sayfasına bir Response.Redirect gönderir (bu da Oturum açma denetiminin hata iletisini görüntülemesine neden olur).

Şekil 9'da kimlik doğrulaması iş akışının akış çizelgesi sunulmaktadır.

Oturum Açma Denetiminin Kimlik Doğrulama İş Akışı

Şekil 9: Oturum Açma Denetiminin Kimlik Doğrulama İş Akışı (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

'nin RedirectToLogin sayfa seçeneğini ne zaman kullanacağınızı FailureActionmerak ediyorsanız aşağıdaki senaryoyu göz önünde bulundurun. Şu anda ana sayfamızda Site.master , anonim bir kullanıcı tarafından ziyaret edildiğinde sol sütunda Hello, yabancı metni görüntüleniyor, ancak bu metni bir Oturum açma denetimiyle değiştirmek istediğimizi düşünün. Bu, anonim bir kullanıcının doğrudan oturum açma sayfasını ziyaret etmelerini gerektirmek yerine sitedeki herhangi bir sayfadan oturum açmasına olanak tanır. Ancak, bir kullanıcı ana sayfa tarafından işlenen Oturum açma denetimi aracılığıyla oturum açamadıysa, bu sayfa büyük olasılıkla ana sayfaya eklenmemiş ek yönergeler, bağlantılar ve başka yardım (yeni hesap oluşturma veya kayıp parola alma bağlantıları gibi) içerdiğinden, bu kullanıcıyı oturum açma sayfasına (Login.aspx) yönlendirmek mantıklı olabilir.

Olay İşleyicisiAuthenticateOluşturma

Özel kimlik doğrulama mantığımızı eklemek için Oturum açma denetiminin Authenticate olayı için bir olay işleyicisi oluşturmamız gerekir. Olay için bir olay işleyicisi Authenticate oluşturmak aşağıdaki olay işleyici tanımını oluşturur:

Protected Sub myLogin_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles myLogin.Authenticate

End Sub

Gördüğünüz gibi, olay işleyicisine Authenticate ikinci giriş parametresi olarak türünde AuthenticateEventArgs bir nesne geçirilir. sınıfı, AuthenticateEventArgs sağlanan kimlik bilgilerinin geçerli olup olmadığını belirtmek için kullanılan adlı Authenticated bir Boole özelliği içerir. Bu durumda görevimiz, sağlanan kimlik bilgilerinin geçerli olup olmadığını belirleyen kodu buraya yazmak ve özelliği buna göre ayarlamaktır e.Authenticate .

Sağlanan Kimlik Bilgilerini Belirleme ve Doğrulama

Kullanıcı tarafından girilen kullanıcı adı ve parola kimlik bilgilerini belirlemek için Oturum açma denetiminin UserName ve Password özelliklerini kullanın. Ek Web denetimlerine girilen değerleri belirlemek için (önceki adımda eklediğimiz TextBox gibiEmail), özelliği ile eşit olan ID şablondaki Web denetimine programlı bir başvuru elde etmek için controlID("controlID") kullanınLoginControlID.FindControl. Örneğin, TextBox'a başvuru almak için Email aşağıdaki kodu kullanın:

Dim EmailTextBox As TextBox = CType(myLogin.FindControl("Email"), TextBox)

Kullanıcının kimlik bilgilerini doğrulamak için iki şey yapmamız gerekir:

  1. Sağlanan kullanıcı adı ve parolanın geçerli olduğundan emin olun
  2. Girilen e-posta adresinin, oturum açmaya çalışan kullanıcının dosyadaki e-posta adresiyle eşleştiğinden emin olun

İlk denetimi gerçekleştirmek için 1. Adımda gördüğümüz gibi yöntemini kullanabiliriz Membership.ValidateUser . İkinci denetim için kullanıcının e-posta adresini belirlememiz gerekir, böylece bunu TextBox denetimine girdiği e-posta adresiyle karşılaştırabiliriz. Belirli bir kullanıcı hakkında bilgi almak için sınıfının GetUser yöntemini kullanınMembership.

GetUser yönteminde bir dizi aşırı yükleme vardır. Herhangi bir parametre geçirmeden kullanılırsa, o anda oturum açmış olan kullanıcı hakkındaki bilgileri döndürür. Belirli bir kullanıcı hakkında bilgi almak için kullanıcı adını geçirerek arayın GetUser . Her iki durumda da , GetUser , EmailIsApproved, IsOnlinevb. gibi UserNameözelliklere sahip bir MembershipUser nesne döndürür.

Aşağıdaki kod bu iki denetimi uygular. Her ikisi de geçerse, e.Authenticate olarak ayarlanır True, aksi takdirde atanır False.

Protected Sub myLogin_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles myLogin.Authenticate
    
 ' Get the email address entered
 Dim EmailTextBox As TextBox = CType(myLogin.FindControl("Email"), TextBox)
 Dim email As String = EmailTextBox.Text.Trim()
    
 ' Verify that the username/password pair is valid
 If Membership.ValidateUser(myLogin.UserName, myLogin.Password) Then

 ' Username/password are valid, check email
 Dim usrInfo As MembershipUser = Membership.GetUser(myLogin.UserName)
    
 If usrInfo IsNot Nothing AndAlso String.Compare(usrInfo.Email, email, True) = 0 Then
 ' Email matches, the credentials are valid
 e.Authenticated = True
 Else
 ' Email address is invalid...
 e.Authenticated = False
 End If
 Else
 ' Username/password are not valid...
 e.Authenticated = False
 End If
End Sub

Bu kod uygulandığında, doğru kullanıcı adını, parolayı ve e-posta adresini girerek geçerli bir kullanıcı olarak oturum açmayı deneyebilirsiniz. Yeniden deneyin, ancak bu kez yanlışlıkla yanlış bir e-posta adresi kullanın (bkz. Şekil 10). Son olarak, var olmayan bir kullanıcı adı kullanarak üçüncü kez deneyin. İlk durumda sitede başarıyla oturum açmanız gerekir, ancak son iki durumda Oturum açma denetiminin geçersiz kimlik bilgileri iletisini görmeniz gerekir.

Yanlış bir Email Adresi Girildiğinde Tito Oturum Açamıyor

Şekil 10: Yanlış Email Adresi Sağlarken Tito Oturum Açamıyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

1. Adımdaki Üyelik Çerçevesi Geçersiz Oturum Açma Girişimlerini nasıl işler bölümünde açıklandığı gibi, yöntem çağrıldığında ve geçersiz kimlik bilgileri geçirildiğinde Membership.ValidateUser , geçersiz oturum açma girişimini izler ve belirli bir zaman penceresinde belirli bir geçersiz deneme eşiğini aşarsa kullanıcıyı kilitler. Özel kimlik doğrulama mantığımız yöntemini çağırdığından ValidateUser , geçerli bir kullanıcı adı için yanlış parola geçersiz oturum açma deneme sayacını artırır, ancak kullanıcı adı ve parolanın geçerli olduğu durumlarda bu sayaç artırılmaz, ancak e-posta adresi yanlıştır. Bir korsanın kullanıcı adını ve parolayı bilmesi mümkün olmadığından ancak kullanıcının e-posta adresini belirlemek için deneme yanılma tekniklerini kullanması gerekeceğinden, bu davranış uygun olabilir.

4. Adım: Oturum Açma Denetiminin Geçersiz Kimlik Bilgileri İletisini İyileştirme

Kullanıcı geçersiz kimlik bilgileriyle oturum açmayı denediğinde, Oturum açma denetimi oturum açma girişiminin başarısız olduğunu açıklayan bir ileti görüntüler. Özellikle, denetim özelliği tarafından FailureTextbelirtilen iletiyi görüntüler ve varsayılan değeri Oturum açma girişiminiz başarılı değildi şeklindedir. Lütfen tekrar deneyin.

Bir kullanıcının kimlik bilgilerinin geçersiz olmasının birçok nedeni olduğunu hatırlayın:

  • Kullanıcı adı mevcut olmayabilir
  • Kullanıcı adı var, ancak parola geçersiz
  • Kullanıcı adı ve parola geçerli, ancak kullanıcı henüz onaylanmadı
  • Kullanıcı adı ve parola geçerli, ancak kullanıcı kilitlendi (büyük olasılıkla belirtilen zaman çerçevesinde geçersiz oturum açma denemesi sayısını aştığından)

Özel kimlik doğrulama mantığını kullanmanın başka nedenleri de olabilir. Örneğin, 3. Adımda yazdığımız kodla kullanıcı adı ve parola geçerli olabilir, ancak e-posta adresi yanlış olabilir.

Kimlik bilgilerinin neden geçersiz olduğuna bakılmaksızın, Oturum Açma denetimi aynı hata iletisini görüntüler. Bu geri bildirim eksikliği, hesabı henüz onaylanmamış veya kilitlenmiş bir kullanıcı için kafa karıştırıcı olabilir. Ancak biraz çalışmayla Oturum açma denetiminin daha uygun bir ileti görüntülemesini sağlayabiliriz.

Bir kullanıcı geçersiz kimlik bilgileriyle oturum açmayı deneyışında Oturum açma denetimi olayı tetikler LoginError . Devam edin, bu olay için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:

Protected Sub myLogin_LoginError(ByVal sender As Object, ByVal e As System.EventArgs) Handles myLogin.LoginError
    
 ' Determine why the user could not login...
 myLogin.FailureText = "Your login attempt was not successful. Please try again."
    
 ' Does there exist a User account for this user?
 Dim usrInfo As MembershipUser = Membership.GetUser(myLogin.UserName)

 If usrInfo IsNot Nothing Then
 ' Is this user locked out?
 If usrInfo.IsLockedOut Then
 myLogin.FailureText = "Your account has been locked out because of too many invalid login attempts. Please contact the administrator to have your account unlocked."
 ElseIf Not usrInfo.IsApproved Then
 myLogin.FailureText = "Your account has not yet been approved. You cannot login until an administrator has approved your account."
 End If
 End If
End Sub

Yukarıdaki kod, Oturum açma denetiminin FailureText özelliğini varsayılan değere ayarlayarak başlar ( Oturum açma girişiminiz başarılı değildi. Lütfen yeniden deneyin). Ardından sağlanan kullanıcı adının mevcut bir kullanıcı hesabıyla eşleşip eşlemediğini denetler. Bu durumda, sonuçta elde edilen nesnenin IsLockedOut ve IsApproved özelliklerine başvurarak MembershipUser hesabın kilitlenip kilitlenmediğini veya henüz onaylanıp onaylanmadığını belirler. Her iki durumda FailureText da özelliği karşılık gelen bir değere güncelleştirilir.

Bu kodu test etmek için, bilerek var olan bir kullanıcı olarak oturum açmayı deneme, ancak yanlış parola kullanma. Bunu 10 dakikalık bir zaman dilimi içinde arka arkaya beş kez yapın, hesap kilitlenir. Şekil 11'de gösterildiği gibi, sonraki oturum açma girişimleri her zaman başarısız olur (doğru parolayla bile) ancak artık çok fazla geçersiz oturum açma girişimi nedeniyle hesabınız kilitlendi ifadesini görüntüler. Hesabınızın kilidinin açık olması için lütfen yöneticiye başvurun.

Tito Çok Fazla Geçersiz Oturum Açma Girişimi Gerçekleştirdi ve Kilitlendi

Şekil 11: Tito Çok Fazla Geçersiz Oturum Açma Denemesi Gerçekleştirdi ve Kilitlendi (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Özet

Bu öğreticiden önce, oturum açma sayfamız sağlanan kimlik bilgilerini kullanıcı adı/parola çiftlerinin sabit kodlanmış bir listesine göre doğrulamıştı. Bu öğreticide, üyelik çerçevesine göre kimlik bilgilerini doğrulamak için sayfayı güncelleştirdik. 1. Adımda yöntemini program aracılığıyla kullanmayı Membership.ValidateUser inceledik. 2. Adımda el ile oluşturulan kullanıcı arabirimimizi ve kodumuzu Oturum açma denetimiyle değiştirdik.

Oturum açma denetimi standart bir oturum açma kullanıcı arabirimini işler ve üyelik çerçevesine göre kullanıcının kimlik bilgilerini otomatik olarak doğrular. Ayrıca, geçerli kimlik bilgileri durumunda Oturum açma denetimi, form kimlik doğrulaması aracılığıyla kullanıcının oturumunu açar. Kısacası, oturum açma denetimini bir sayfaya sürükleyerek, fazladan bildirim temelli işaretleme veya kod gerekmeyerek tam işlevsel bir oturum açma kullanıcı deneyimi sağlanır. Dahası, Oturum açma denetimi yüksek oranda özelleştirilebilir ve hem işlenen kullanıcı arabirimi hem de kimlik doğrulama mantığı üzerinde hassas bir denetim sağlar.

Bu noktada web sitemizin ziyaretçileri yeni bir kullanıcı hesabı oluşturabilir ve sitede oturum açabilir, ancak kimliği doğrulanmış kullanıcıya göre sayfalara erişimi kısıtlama konusuna henüz bakmadık. Şu anda kimliği doğrulanmış veya anonim olan tüm kullanıcılar sitemizdeki herhangi bir sayfayı görüntüleyebilir. Sitemizin sayfalarına erişimi kullanıcı bazında denetlemenin yanı sıra, işlevselliği kullanıcıya bağlı olan belirli sayfalarımız olabilir. Sonraki öğreticide, oturum açmış kullanıcıya göre erişimi ve sayfa içi işlevselliği sınırlama ele alınmaktadır.

Mutlu Programlama!

Daha Fazla Bilgi

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Yazar hakkında

Birden çok ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Scott'a adresinden mitchell@4guysfromrolla.com veya adresinden blogundan http://ScottOnWriting.NETulaşabilirsiniz.

Özel Teşekkürler

Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçirenleri Arasında Teresa Murphy ve Michael Olivero vardı. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresinden bir satır mitchell@4GuysFromRolla.combırakın.