Request.ServerVariables("LOGON_USER") ASP.NET içinde boş dize döndürür

Bu makalede, değişkenin ASP.NET'de boş dize döndürme sorununa Request.ServerVariables("LOGON_USER") yönelik çözümler sağlanır.

Orijinal ürün sürümü: ASP.NET
Özgün KB numarası: 306359

Belirtiler

değişkenine Request.ServerVariables("LOGON_USER") ASP.NET erişmeye çalışırsanız boş bir dize döndürülür.

Microsoft Visual C# .NET kullanıyorsanız, aşağıdaki söz dizimi bu değişkene erişir:

Request.ServerVariables["LOGON_USER"]

Neden

Bu sorun, .aspx sayfasına erişmek için Anonim Erişim güvenliği kullanırsanız koleksiyondaki ServerVariables kimlik doğrulamasıyla ilgili değişkenlerin doldurulmaması nedeniyle oluşur. Anonim kullanıcıya web.config dosyasının <authorization> bölümünde erişim verdiğinizde de bu sorun oluşabilir.

Çözüm

dışında bir kimlik doğrulama modu kullandığınızda değişkeni doldurmak LOGON_USER için ,web.config dosyasının <authorization> bölümünde anonim kullanıcıya erişimi reddedebilirsiniz.None Bölümünde anonim kullanıcıya <authorization> erişimi reddetmek için şu adımları izleyin:

  1. web.config dosyasındaki kimlik doğrulama modunu dışında Nonebir şeyle değiştirin. Örneğin, web.config dosyasındaki aşağıdaki giriş, kimlik doğrulama modunu Forms tabanlı kimlik doğrulaması olarak ayarlar:

    <authentication mode="Forms" />
    
  2. web.config dosyasında anonim kullanıcıya erişimi reddetmek için aşağıdaki söz dizimini kullanın:

    <authorization>
        <deny users = "?" /> <!-- This denies access to the anonymous user -->
        <allow users ="*" /> <!-- This allows access to all users -->
    </authorization>
    

Windows kimlik doğrulaması kullanıyorsanız, bu sorunu çözmek için aşağıdaki adımları da kullanabilirsiniz:

  1. web.config dosyasındaki Windows kimlik doğrulama modunu şu şekilde değiştirin:

    <authentication mode="Windows" />
    
  2. Internet Services Manager'da .aspx dosyasına veya Web Projesi klasörüne sağ tıklayın ve özellikler'i seçin.

  3. Web Projesi klasörünün Özellikler'i seçerseniz Dizin Güvenliği sekmesini seçin. .aspx dosyası için Özellikler'i seçerseniz Dosya Güvenliği sekmesini seçin.

  4. Anonim Erişim ve kimlik doğrulama denetimi'nin altında Düzenle'yi seçin.

  5. Kimlik doğrulama yöntemleri iletişim kutusunda Anonim Erişim onay kutusunu temizleyin ve ardından Temel, Özet veya Tümleşik (NT Sınaması/Yanıt) onay kutusunu seçin.

  6. Her iki iletişim kutusunu da kapatmak için Tamam'ı seçin.

Durum

Bu davranış tasarımdan kaynaklanır.

Daha fazla bilgi

ASP.NET, .config dosyalarında yapılandırabileceğiniz yeni kimlik doğrulama modları ve yetkilendirme düzenleri sağlar. Bu nedenle, yalnızca IIS'de kimlik doğrulama modlarını değiştirmek her zaman istenen sonuçları vermeyebilir. Bu nedenle, .config dosyalarındaki güvenlik ayarlarını da göz önünde bulundurmanız gerekir.

Not

Anonim kimlik doğrulamasını Windows kimlik doğrulamasıyla birlikte etkinleştirdiğinizde veya dışında herhangi bir kimlik doğrulama modu Nonekullanırken bölümünde anonim kullanıcıya <authorization> erişim izni verirseniz ve REMOTE_USER gibi AUTH_USER diğer sunucu değişkenleri de (HttpContext.Current.User.Identity.Nameözellik) boş bir dize döndürür. Bu değişkenleri doldurmak için yukarıda belirtilen çözümlerden herhangi birini kullanabilirsiniz.

ASP.NET'de, Anonim Erişim güvenliğinin Request kullanılıp kullanılmadığını belirlemek için nesnesinin özelliğini de kullanabilirsinizIsAuthenticated. IsAuthenticatedAnonim Erişim açıksa false döndürür ve , Passport, Integrated (NT Challenge/Response)veya Basicgibi Formsbaşka bir kimlik doğrulama aracı kullanırsanız true döndürür.

Başvurular