簡體   English   中英

在ASP.NET中強制自定義HTTP 401未授權頁面

[英]Forcing a custom HTTP 401 unauthorized page in ASP.NET

我已經編寫了一個Web應用程序,供工作時內部使用(不適用於更廣泛的Internet),它使用Windows身份驗證 - ASP.NET查詢Windows以獲取當前的憑據集。 如果在我設置的AD組中找不到用戶名,則從受保護頁面的Page_PreInit調用的身份驗證方法會引發401錯誤。

我實現了Earlz'CustomErrorsFixer 拋出一個HttpException總是發回HTTP 500錯誤? 因為我也只有500秒回來了。 現在我的自定義錯誤頁面正常工作,這很棒。

在Visual Studio開發服務器本地開發,我發現如果我沒有訪問權限,我會直接進入401錯誤頁面。 然而! 當我將站點發布到IIS服務器時,如果用戶沒有訪問權限,則會獲得Windows用戶名/密碼提示 (XP中的丑陋,小的)。 這實際上非常方便,因為它使登錄到不同域的人有機會輸入正確的憑據。

在此階段,當密碼提示出現時,如果用戶點擊取消退出 ,他們會轉到自定義401頁面,告訴他們如何進行請求訪問。 但是,如果他們嘗試輸入用戶名和密碼(默認為錯誤的域名,因此是不正確的憑據),則會顯示默認的IIS 401頁面 ,我非常希望避免這些頁面 第三種情況 - 如果他們輸入CORRECT憑據,則會詢問他們3次,然后顯示自定義錯誤頁面。

因此,如果用戶“經過身份驗證”,則會看到自定義401頁面,如果不是,則會看到標准IIS頁面。

但是,我發現大多數人在提示輸入用戶名/密碼框時只輸入沒有域名的用戶名/密碼 - 這最終會導致錯誤,因此將其發送到非自定義IIS 401頁面 有誰知道我怎么解決這個問題? 這非常煩人,因為人們需要查看自定義401頁面才能看到他們需要訪問哪個組!

如果它很重要,我們所有使用的瀏覽器都是XP上的IE8或Windows 7上的IE9。請告訴我是否應該發布任何代碼。

IIS7默認攔截401以及一些其他HTTP狀態代碼。

嘗試這個:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM