IIS 7.5: Windows Kimlik Doğrulaması ile özel Kimlik Doğrulama Hatası sayfası nasıl yapılandırılır. 401 başlık sorunları


14

IIS 7.5 altında çalışan bir php web sitem var. Site Windows kimlik doğrulaması ile güvence altına alınmıştır ve düzgün çalışır:

Windows Kimlik Doğrulaması açık

Kullanıcılar siteye gittiklerinde, kullanıcı adı / parola girmeleri ve kimlik doğrulaması yapıldıklarında geçiş yapmaları istenir. Kullanıcılar Parola'yı 3 kez İptal veya yanlış yazdıysa, 401 hata sayfası gösterilir:

Çirkin 401 sayfa

Şimdi nasıl giriş yapılacağını açıklayan özel bir sayfa göstermek istiyorum. Bu yüzden Hata sayfalarına gidiyorum, 401.2 durum kodunu seçiyorum ve görüntülemek istediğim sayfaya yönlendiriyorum:

Hata sayfaları ayarları

Ardından, özel hataların herkes için açık olduğundan emin olun. Ve kaa-boom! Kimlik doğrulama artık çalışmıyor, kullanıcılara şifre istemi sunulmuyor. Belgelerin dediği gibi, Windows Kimlik Doğrulaması önce 401 yanıtı göndererek çalışır, ardından tarayıcı kullanıcıdan sağlayıcı kimlik bilgilerini ister ve daha sonra ne yapacağını öğrenir.

Burada ne olur: sayfa için ilk istek üzerine IIS 401 üstbilgisi göndermeye çalışır, ancak web.config dosyasının "bu sayfaya 401 yönlendirmesinde" yazdığını fark eder. Kimlik doğrulama yerine, yalnızca yönlendirme sayfasını verir.

Ben 401, 401.1, 401.2 değiştirmeyi denedim - hiçbir fark yaratmadı.

Neyi yanlış yapıyorum ve kullanıcı kimlik doğrulama hatası hakkında özel sayfa nasıl verilir?

ps İşte web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom">
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <remove statusCode="401" subStatusCode="-1" />
            <error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="/not_restricted/401.htm" responseMode="ExecuteURL" />
            <error statusCode="404" prefixLanguageFilePath="" path="/not_restricted/404.htm" responseMode="ExecuteURL" />
        </httpErrors>
        <httpProtocol>
            <customHeaders>
                <remove name="X-Powered-By" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
    <system.web>
        <identity impersonate="false" />
        <customErrors defaultRedirect="http://www.myserver.com/not_restricted/500.htm" mode="Off">
        </customErrors>
    </system.web>
</configuration>

Yanıtlar:


15

Bunu dene:

değişiklik:

<error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="/not_restricted/401.htm" responseMode="ExecuteURL" />

için

<error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="not_restricted\401.htm" responseMode="File" />

Yanıt modu 'Dosya' ile IIS bu dosyanın içeriğini yükler ve görüntüler, yine de istemciye 401 durumunu geri gönderir.

Eskiden 'ExecuteURL' kullanıyordum ama Dosya modunun daha iyi çalıştığını öğrendim. Hata sayfalarınızdaki bağlantılı kaynakların hala çalıştığından emin olmanız yeterlidir.


1
Efendim, sen bir yıldızsın! Bu ilk denemeden itibaren sorunu çözdü!
trailmax

2

Özel httperrors ekledikten sonra kimlik bilgileri istenmez kullanıcıların aynı sorunla karşılaştı ve 0 subStatusCode ile düzeltmek mümkün. Umarım bu birine yardımcı olur.

<error statusCode="401" subStatusCode="0" path="..." responseMode="ExecuteURL">

1

Bu yüzden, tarayıcıya sorulmaması gereken Temel Kimlik Doğru sorunu ile zorlandım. Ne 401.0 özel hatasını zorlamak (yani alt kodu 0'a ayarlamak) ya da kayıt defteri anahtarı oluşturma ayarı benim için çözdü.

Başlamak için özel hata sayfalarını kullanmamız ortaya çıktı. Onları kapatmak, her şey iyi çalıştı, geri döndü ... özellikle 401 (0) ve 401.2 hataları istemi engelledi.

Özel hata türünü 'ExecuteURL' öğesinden 'Dosya' olarak ayarlamak sorunu çözdü, ancak kullanıcı istemi iptal ettiyse veya kötü bir parola girerse, genel bir "Bu dizini veya sayfayı görüntüleme izniniz yok".

Çeşitli mesajlardan ipuçlarını bir sürü aldıktan sonra, ama asla kesin bir 'nasıl yapılır' veya 'neden' ... Sitenin alt dizininde bulunan özel hata dosyası için göreceli bir yol kullanıyordum. Yolu mutlak bir yolla değiştirmek, iptal edildiğinde veya hatalı bir parola olduğunda yukarıdaki genel hatanın "bu sayfayı görüntüleyemiyor" olarak değiştirilmesine neden oldu. Biraz daha kazma ve bir yazı buldumvarsayılan olarak false olarak ayarlanmış olan "allowAbsolutePathsWhenDelegated" yapılandırma özelliğinden bahsediyor. Ayrıca, yalnızca müşteri hata dosyasını sitenizin kök dizinine koyarsanız ve daha sonra özel hata konumuna yalnızca dosya adının (yani sitenin köküne ilişkin göreceli yol) işe yarayacağını ... , Sitemin kök dizinine özel hatalar koymak istemedim. Bu nedenle, yukarıdaki özniteliği true olarak ayarlamak, özel hata dosyalarının mutlak yolunu ayarlamak ve her şeyin iyi çalışmaya başlaması için ConfigurationEditor'u kullandım. Bilgi istemi kaldı, tetiklendiğinde özel hata görüntüleniyor.

Ne istiyorum, iç içe göreli bir yol ile Dosya özniteliğini kullanabilmek, ama şimdiye kadar neden yapamıyorum veya nasıl yapılacağını bulamadım. Diğer soru, eğer mutlak bir yol kullanarak, potansiyel olarak bir güvenlik açığı oluşturuyorsam (yani bu neden varsayılan olarak devre dışı bırakılsın?)

Her neyse, umarım bu birisine yardım eder.


0

Benim durumumda garip bir nedenden ötürü asp.net MVC 5 için 2 çözüm kombinasyonu benim için çalıştı.

  <error statusCode="401" subStatusCode="0" prefixLanguageFilePath="" path="not_restricted\401.htm" responseMode="File" />

Kabul edilen cevap tam olarak budur.
Aydınlık

durum kodu farklı.
Teoman shipahi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.