Aracılığıyla paylaş


Form Kimlik Doğrulaması Sorunlarını Giderme

Şunlar için geçerlidir: Internet Information Services

Genellikle ASP.NET bir web uygulamasında Form Kimlik Doğrulaması kullanılırken, yeni veya devam eden bir istek aralıklı olarak uygulamanın oturum açma sayfasına yönlendirildiğinde oluşan bir sorunu gidermeye ihtiyaç vardır. Geliştirme ortamında bir hata ayıklayıcı ekleyerek Visual Studio IDE'de bu sorunun hatalarını ayıklayabilirsiniz. Ancak üretim ortamlarında görev hektik ve sorunlu hale gelir. Bunun gibi rastgele bir sorunu gidermek için, kök nedeni daraltabilmek için sorunla ilgili bilgileri günlüğe kaydetmeniz gerekir.

Bu makalede Forms Kimlik Doğrulaması kavramı kısaca ele alınmaktadır. Ayrıca kullanıcının oturum açma sayfasına yönlendirildiği ve sorunu yalıtmak için uygun verileri nasıl yakalayacakları hakkında çeşitli senaryolar ele alınmaktadır. Ayrıca, Forms Kimlik Doğrulaması bilgilerini günlüğe kaydetmek için bir IHttpModule arabirimin nasıl uygulanılacağı da açıklanır.

ASP.NET Forms Kimlik Doğrulamasına Genel Bakış

Forms kimlik doğrulaması, kendi kodunuzu kullanarak kullanıcıların kimliğini doğrulamanızı ve ardından tanımlama bilgisinde veya URL'de kimlik doğrulama belirtecini korumanızı sağlar. Forms kimlik doğrulaması, sınıf boyunca ASP.NET sayfa yaşam döngüsüne FormsAuthenticationModule katılır. Sınıfını kullanarak form kimlik doğrulama bilgilerine ve özelliklerine FormsAuthentication erişebilirsiniz.

Form kimlik doğrulamasını kullanmak için, kullanıcıdan kimlik bilgilerini toplayan ve kimlik bilgilerinin kimliğini doğrulamak için kod içeren bir oturum açma sayfası oluşturun. Genellikle, kullanıcılar kimlik doğrulaması gerektiren bir sayfa gibi korumalı bir kaynağa erişmeye çalıştığında, uygulamayı istekleri oturum açma sayfasına yeniden yönlendirecek şekilde yapılandırabilirsiniz. Kullanıcının kimlik bilgileri geçerliyse, uygun bir kimlik doğrulama bileti (tanımlama bilgisi) ile isteği özgün olarak istenen kaynağa yeniden yönlendirmek için sınıfının yöntemlerini FormsAuthentication çağırabilirsiniz. Yeniden yönlendirmeyi istemiyorsanız, form kimlik doğrulama tanımlama bilgisini alabilir veya ayarlayabilirsiniz. Sonraki isteklerde, tarayıcınız kimlik doğrulama tanımlama bilgisini istekle birlikte geçirir ve ardından oturum açma sayfasını atlar.

Varsayılan olarak, FormsAuthenticationModule sınıfı Machine.config dosyasına eklenir. sınıfı, FormsAuthenticationModule Forms Kimlik Doğrulaması işlemini yönetir.

Machine.config dosyasında aşağıdaki girdiyi görebilirsiniz:

<httpModule> 
  <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />            
</httpModule>

Kimlik doğrulaması yapılandırma öğesini kullanarak, örneğin oturum açma sayfası ayarlayarak form kimlik doğrulamasını yapılandırabilirsiniz. Yapılandırma dosyasında, kimliği doğrulanmamış istekleri oturum açma sayfasına yönlendirmek için bir URL belirtin.

Başarılı kimlik doğrulamasından FormsAuthenticationModule sonra modül, User özelliğinin değerini kimliği doğrulanmış kullanıcıya bir başvuru olarak ayarlar. Aşağıdaki kod örneğinde, form kimliği doğrulanmış kullanıcının kimliğinin program aracılığıyla nasıl okunduğu gösterilmektedir.

String authUser2 = User.Identity.Name;

Form kimlik doğrulamasıyla çalışmanın kullanışlı bir yolu, ASP.NET üyeliği ve ASP.NET oturum açma denetimlerini kullanmaktır. ASP.NET üyelik, kullanıcı bilgilerini depolamanıza ve yönetmenize olanak tanır ve kullanıcıların kimliğini doğrulamak için yöntemler içerir. ASP.NET oturum açma denetimleri ASP.NET üyelikle çalışır. Kullanıcılardan kimlik bilgileri isteme, kullanıcıları doğrulama, parolaları kurtarma veya değiştirme gibi işlemleri yapmak için mantığı kapsüller. Aslında, ASP.NET üyelik ve ASP.NET oturum açma denetimleri form kimlik doğrulaması üzerinde bir soyutlama katmanı sağlar. Bu özellikler, form kimlik doğrulamasını kullanmak için normalde yapmanız gereken işlerin çoğunun veya tümünün yerini alır.

Senaryolar

bir isteğin login.aspx sayfasına yönlendirilmesinin senaryoları aşağıdadır:

Form kimlik doğrulama tanımlama bilgisi kaybolur.

1. Senaryo

Web sitesinde oturum açarsınız. Bir noktada istemci sunucuya bir istek gönderir ve FormsAuthenticationModule sınıf tanımlama bilgisini almaz.

2. Senaryo

İstemcinin tanımlama bilgisi sınırı aşıldığında form kimlik doğrulaması tanımlama bilgisi de kaybolabilir. Microsoft Internet Explorer'da 20 tanımlama bilgisi sınırı vardır. Sayaç 20'ye ulaştığında, önceki 19 tanımlama bilgisi istemcinin koleksiyonundan kaldırılır. ASPXAUTH tanımlama bilgisi kaldırılırsa, sonraki istek işlendiğinde oturum açma sayfasına yönlendirilirsiniz.

3. Senaryo

İstek istemciden ayrıldıktan sonra, gönderilen paketleri etkileyebilecek çeşitli katmanlar vardır. Bir ağ cihazının tanımlama bilgisini kaldırıp kaldırmadığını belirlemek için istemcide ve sunucuda bir ağ izlemesi yakalamanız ve ardından tanımlama bilgisi isteğinin gövdesine bakmanız gerekir. Tanımlama bilgisinin gönderildiğinden emin olmak için istemci isteğine bakmak ve sunucunun tanımlama bilgisini aldığından emin olmak için sunucu izlemesini denetlemek istiyorsunuz.

Forms kimlik doğrulama bileti zaman aşımına uğradı

ASP.NET 2.0 uygulamalarında, varsayılan olarak form kimlik doğrulama timeout değeri 30 dakika olarak değiştirilmiştir. Bu, 30 dakika etkinlik dışı kalma süresinden sonra yeniden oturum açmanız istenileceği anlamına gelir.

Not

Bir web sitesine her seferinde eriştiğiniz zaman, 30 dakikalık pencere saati sıfırlanır. Sadece boştaysa zaman aşımı olur.

Değerin timeout daha uzun olmasını istiyorsanız, yerel web.config dosyanızdaki değeri kolayca değiştirebilirsiniz timeout (timeoutdeğer dakika cinsindendir):

<system.web> 
 <authentication mode="Forms">     
   <forms timeout="120"/>                 
 </authentication>
</system.web>

4\. Senaryo

Form kimlik doğrulaması, yapılandırma dosyasında tanımlanan özniteliğin timeout değerinden önce sona erebilir.

Form kimlik doğrulama bileti el ile oluşturulursa, timeout anahtarın özelliği yapılandırma dosyasında ayarlanan değeri geçersiz kılar. Bu nedenle, bu değer yapılandırma dosyasındaki değerden küçükse, form kimlik doğrulama anahtarının süresi yapılandırma dosyası timeout öznitelik değerinden önce dolar ve bunun tersi de geçerlidir. Örneğin, Zaman aşımı özniteliğinin FORMS Web.config dosyasında 30 olarak ayarlandığını ve biletin süre sonu değerinin 20 dakika olarak ayarlandığını varsayalım. Bu durumda form kimlik doğrulama biletinin süresi 20 dakika sonra dolar ve yeniden oturum açmanız gerekir.

Event code: 4005
Event message: Forms authentication failed for the request. Reason: The ticket 
supplied has expired.

Senaryo 5

Form kimlik doğrulaması kullanan ASP.NET 4 web uygulamasında olay günlüğü iletisi şunları söyler:

Event code: 4005 
Event message: Forms authentication failed for the request. Reason: The ticket supplied was invalid.

Veri toplama ve sorun giderme

Sorun giderme senaryosu 1

Microsoft Internet Information Services'te (IIS) tanımlama bilgisi günlüğünü etkinleştirerek bir isteğin tanımlama bilgisini içermediğini belirleyebilirsiniz. Bunu yapmak için aşağıdaki adımları izleyin:

  1. IIS Microsoft Yönetim Konsolu'nu (MMC) açın.
  2. Web sitesine sağ tıklayın ve özellikler'i seçin.
  3. Web Sitesi sekmesini ve ardından Günlüğü Etkinleştir'i seçin.
  4. Günlük biçiminin W3C Genişletilmiş Günlük dosyası biçiminde olduğundan emin olun.
  5. Özellikleri'i seçin.
  6. Gelişmiş sekmesini ve ardından Genişletilmiş Özellikler'i seçin.
  7. Genişletilmiş Özellikler'in altında Tanımlama Bilgisi(cs(Tanımlama Bilgisi)) ve Başvuran (cs(Başvuran)) onay kutularını seçin.

Bu sorun oluştuktan sonra, sorunun hangi istemcide olduğunu ve bu istemcinin IP adresini belirleyin. İstemcinin IP adresinde IIS günlüğünü filtreleyin ve sütunu görüntüleyin <COOKIE> .

Not

IIS Günlüklerini ayrıştırmak için Günlük Ayrıştırıcısı'nı kullanın.

Belirli bir kullanıcıdan gelen isteklerin listesini aldıktan sonra oturum açma sayfasına yönelik istekleri arayın. Bu sayfaya yönlendirildiklerini biliyor ve yeniden yönlendirme gerçekleşmeden önce istekleri görmek istiyorsunuz. Aşağıdakine benzer bir şey görürseniz, istemci tanımlama bilgisini göndermedi veya istemci ile sunucu arasındaki ağda tanımlama bilgisi kaldırıldı.

Not

Kalıcı bir tanımlama bilgisi oluşturmadığınız sürece ilk isteğin form kimlik doğrulama tanımlama bilgisine sahip olması olası değildir. IIS Günlüğü yalnızca istekte alınan tanımlama bilgilerini gösterir. Başarılı bir oturum açma girişiminden sonra form kimlik doğrulaması tanımlama bilgisine sahip olmak için ilk istek.

Sorun giderme senaryosu 2

Microsoft Internet Explorer, aşağıdaki RFC 2109 önerilen en düşük sınırlamalara uyar:

  • En az 300 kurabiye.
  • Tanımlama bilgisi başına en az 4.096 bayt (Set-Cookie üst bilgisinin söz dizimi açıklamasında terminal olmayan tanımlama bilgisini oluşturan karakterlerin boyutuyla ölçülür).
  • Benzersiz konak veya etki alanı adı başına en az 20 tanımlama bilgisi.

İstemcinin tanımlama bilgisi sınırı aşıldığında form kimlik doğrulaması tanımlama bilgisi de kaybolabilir. Microsoft Internet Explorer'da 20 tanımlama bilgisi sınırı vardır. Sayaç 20'ye ulaştığında, önceki 19 tanımlama bilgisi istemcinin koleksiyonundan kaldırılır. ASPXAUTH tanımlama bilgisi kaldırılırsa, sonraki istek işlendiğinde oturum açma sayfasına yönlendirilirsiniz. İstemciden tanımlama bilgisini alıp almadığınızı görmek için HTTP isteğini veya yanıt üst bilgilerini görmek için Fiddler'ı kullanabilirsiniz. Fiddler'ı indirin.

İstemci makinesinde Fiddler aracını başlatın, var olan HTTP izlemelerini kaldırın, form kimlik doğrulaması uygulayan uygulamanıza erişin ve uygulamada oturum açmayı deneyin ve istemci ile sunucu arasında form kimlik doğrulaması tanımlama bilgisi değişimi olup olmadığını görmek için Fiddler'daki HTTP trafiğini gözlemleyin. Trafiği yakaladıkktan sonra bir isteğe çift tıklayın ve Ardından Tanımlama Bilgisi Ayarla üst bilgisini görmek için Üst Bilgiler'i seçin. Başarılı bir oturum açma işlemini izlerseniz, başarılı bir oturum açma işleminin yanıtında Set-Cookie üst bilgisini görürsünüz.

Varsayılan olarak, Internet Explorer her etki alanı için en fazla 20 tanımlama bilgisi depolayabilir. Etki alanındaki bir sunucu bir istemci bilgisayara 20'den fazla tanımlama bilgisi gönderirse, istemci bilgisayardaki tarayıcı bazı eski tanımlama bilgilerini otomatik olarak atar.

Her tanımlama bilgisi tek bir ad-değer çifti oluşur. Bu çifti noktalı virgülle ayrılmış öznitelik-değer çiftleri takip edebilir. Bu sınır, çok sayıda tanımlama bilgisi kullanması gereken etki alanlarında Web uygulamalarının geliştirilmesini ve barındırılması sürecini basitleştirmek için artırılmıştır. Güncelleştirme 937143 yüklenmesi, Internet Explorer'ın her etki alanı için depolayabileceğiniz tanımlama bilgilerinin sayısını 20'den 50'ye artırır. Daha fazla bilgi için bkz . BT Uzmanları için Internet Explorer ve Microsoft Edge ile ilgili sık sorulan sorular (SSS).

Sorun giderme senaryosu 3

İstek istemciden ayrıldıktan sonra, gönderilen paketleri (güvenlik duvarları, ara sunucular ve yük dengeleyiciler) etkileyebilecek çeşitli katmanlar vardır. Bir ağ cihazının tanımlama bilgisini kaldırıp kaldırmadığını belirlemek için istemcide ve sunucuda bir ağ izlemesi yakalamanız ve ardından isteğin gövdesinde tanımlama bilgisini aramanız gerekir. Tanımlama bilgisinin gönderildiğinden emin olmak için istemci isteğine bakmak ve ardından sunucunun bu tanımlama bilgisini aldığından emin olmak için sunucu izlemesini denetlemek isteyebilirsiniz.

İstemci isteği

Bu, kullanıcının kimliği doğrulandıktan sonra yapılan bir GET istektir. Form kimlik doğrulama bileti bilgileri gri renkle vurgulanır. Bu, çerez bilgilerinin istemciden ayrıldığını onaylar. WireShark gibi bir ağ yakalama aracı kullandığınızda bağdaştırıcıdan geçen trafiği görürsünüz.

47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local
68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61   gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63   spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c   cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53   che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30   PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36   C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46   9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35   51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46   81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34   24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39   B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46   9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43   BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46   2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65   4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62   =VisitorId=b24eb

Sunucu tarafı isteği

Sunucuya ulaşan isteği gördüğünüzde, sunucunun istemcinin gönderdiği bilgileri aldığından emin olun. Sunucu aynı bilgileri almadıysa, tanımlama bilgisinin kaldırıldığı yeri belirlemek için ağdaki diğer cihazları araştırmanız gerekir.

Not

Ayrıca tanımlama bilgilerini kaldıran ISAPI filtreleri örnekleri de vardır. Web sunucusunun tanımlama bilgisini aldığını onaylarsanız ancak tanımlama bilgisi IIS günlüklerinde listelenmiyorsa ISAPI filtrelerini denetleyin. Sorunun çözülmüş olup olmadığını görmek için filtreleri kaldırmanız gerekebilir.

Sorun giderme senaryosu 5

  • Senaryo bir web grubu içeriyorsa, web grubundaki her sunucudaki yapılandırma dosyalarının, sırasıyla karma oluşturma ve şifre çözme için kullanılan doğrulama anahtarı ve şifre çözme anahtarları için aynı değere sahip olduğundan emin olun. Gruptaki tüm sunucularda tutarlılığı korumak için aşağıdaki machineKey'i kullanın:

    <machineKey validationKey="<yourKey>" decryptionKey="<yourKey>" validation="SHA1" />
    

    Makine anahtarları hakkında daha fazla bilgi için bkz . Makine Anahtarı ve Uygulama Güvenliğini Planlama.

    Makine anahtarları oluşturmayı öğrenmek için bkz . Makine Anahtarı Ayarları.

  • timeout Tüm web sunucularında her iki formun ,yani kimlik doğrulama modülünün ve oturum modülünün değerlerini karşılaştırın.

  • Gruptaki tüm web sunucuları arasında ASP.NET 4 için Framework klasörünün altındaki System.Web.dll sürümünü karşılaştırın. form kimlik doğrulaması istek için başarısız oldu. Bunun nedeni, sağlanan biletin geçersiz olmasıdır. Bunun nedeni, web sunucularından birinde MS .NET Framework 4 için Güvenilirlik Güncelleştirmesi 1'in eksik olmasıdır.

  • Eksik olan ve sunucuyu yeniden başlatan sunucuya .NET Framework 4 kb2533523 için Güvenilirlik Güncelleştirmesi 1'i yükleyin. Sorun düzeltildi. Daha fazla bilgi için bkz . .NET Framework 4 için Güvenilirlik Güncelleştirmesi 1.

Daha Fazla Bilgi

Üçüncü taraf bilgileri hakkında yasal uyarı

Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.