我有一個使用ActiveDirectory進行身份驗證的ASP.NET網站。ASP.NET WindowsAuthentication自定義401未經授權的錯誤頁面
現在,當通過身份驗證的用戶打開一個頁面時,他會自動進行身份驗證。我遇到了一個問題 - 當未經身份驗證的用戶(例如,未定義爲network.automatic-ntlm-auth.trusted-uris
屬性的Mozilla Firefox用戶)打開頁面時,IIS將發送401響應並提示輸入登錄名\密碼。
我想要的是不要提示他輸入登錄名\密碼 - 只顯示一個自定義錯誤頁面。這聽起來很簡單 - 通過身份驗證的用戶可以獲得所請求的頁面,未經身份驗證的用戶可以重定向到自定義錯誤頁面。它對於FormsAuthentication來說工作得很好。
但是,現在我已經嘗試了很多方法。任何Web.config重定向都不起作用。即使我清除了一個Response
並放置了一個重定向 - 我將得到一個循環,因爲此自定義頁面(*例如,/Error/AccessDenied
)也需要身份驗證。標記控制器爲AllowAnonymous
什麼也不做。
但是,如果我在IIS管理器中啓用了匿名身份驗證,則當真實身份驗證的域用戶在打開網站時沒有被授權。
我該如何解決這個問題?
你想非IE用戶重定向到另一個頁面?基於用戶代理的URL重寫是一條路。 –
不可能。首先來自瀏覽器的請求始終是匿名的。 IIS總是通過'www.authenticate:negotiate'(或NTLM或兩者)頭以'401 Unauthorized'響應。然後客戶端(瀏覽器)再次使用'Authorization:Negotiate ..hash..'頭部來請求這次。根據可信站點,瀏覽器***將***總是要求憑證。無法顯示自定義錯誤,因爲第一個響應始終爲「401」。 – Abhitalks
你可以編寫一個HTTP模塊並鉤上HttpApplication.PostAuthenticateRequest。從那裏你可以使用HttpContext.RewritePath和/或以你想要的方式使用響應上下文。很難說沒有明確的repro案例。 –