從過去兩天我一直在嘗試這個。我不明白有什麼問題。我在網上搜索但沒有找到任何解決方案。我嘗試了 IIS 的所有設置,例如“向下移動協商,禁用其他身份驗證”,但不起作用。這是我的問題:我在 ASP.NET 中有一個 Intranet Web 應用程序,它使用儲存在 Active Directory 中的使用者名稱和密碼。我的申請中有五個不同的頁面。所有頁面及其 web.config 檔案都儲存在單獨的資料夾中。這些 web.config 檔案包含允許查看該頁面的使用者的名稱,如下所示。
<authorization>
<allow users="Domainname\username"/>
</authorization>
我想將那些不在上面列表中的用戶重定向到其他錯誤頁面並提供適當的訊息。我用過這個
protected void Application_EndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Response.Status.StartsWith("401"))
{
HttpContext.Current.Response.ClearContent();
Response.Redirect("~/myerrorpage.aspx?myerrormsg=you are not allowed");
}
}
這是在本機上運行的,但是當我將應用程式放入 IIS 中時,所有授權使用者(清單中的使用者)也會重新導向到錯誤訊息頁面。
在 IIS 之外,它可以正常工作。但是,我無法將未經授權的使用者重新導向到錯誤訊息頁面。我也嘗試過 IIS 的錯誤頁面設置,但遇到了相同的問題。
請建議我應該做什麼來糾正這個問題。還有其他方法嗎?
答案1
我不確定這是否是您具體情況下的問題,但總的來說,過程是:
- 瀏覽器嘗試連接匿名的第一次連接時
- Web 伺服器顯示“抱歉,您不能這樣做,錯誤 401,這是用戶可以進行身份驗證的方法”
- 瀏覽器整理身份驗證(例如要求使用者提供憑證)
- 瀏覽器發出第二個請求,其中包含身份驗證標頭訊息
我的猜測是,您在步驟 (1) 中失敗了,因為在使用者有機會提供憑證之前捕獲了第一個 401。您可以使用 F12 工具或 Fiddler 等工具來驗證這一點。
答案2
如果您使用 Windows 驗證,那麼您應該記住這一點 - 如果您在 IIS 中手動啟用 Windows 驗證,請不要在 web.config 中包含以下程式碼
<authentication mode="Windows" />
如果你使用這個,它會導致與我上面的問題中所述相同的問題。