Asp.net-Mvc
401.0 - 未經授權 - 帶有 IIS 7 的 MVC 應用程序
我有一個通常可以正常工作的 MVC 應用程序,但在特定伺服器上,它返回 401.0“經過身份驗證的使用者無權訪問處理請求所需的資源”錯誤。
通常它是這樣工作的:
- 使用者登錄到一個單獨的應用程序,獲得一個使用者 ID 和令牌,點擊一個連結進入這個應用程序。使用者 ID 和令牌進入 URL。
- 使用者使用匿名身份驗證進入我的應用程序,然後在我們的 LogonAuthorize 過濾器中,我們從查詢字元串中獲取 ID 和令牌以對使用者進行身份驗證。
我已經登錄過濾器,我可以看到使用者通過了身份驗證。所以,他們至少做到了這一點。但是,不是他們應該看到的頁面,而是來自 IIS 的 401.0 Unauthorized 錯誤。
我嘗試過的事情:
- 授予 IUSR 對目錄的訪問權限
- 執行 mirate.exe(它是一個實體框架應用程序)
- 刪除所有$$ Authorize $$解決方案中的屬性……我知道我們將它作為我的 BaseController 對象的 Initialize() 事件。我們似乎沒有把它做成具體的控制器動作,比如繼承BaseController的Home/Index。在 BaseController.Initialize() 之後我沒有看到任何日誌記錄。
- 授予網路服務對目錄的訪問權限
- 將應用程序池從集成切換到經典(我得到一個空白螢幕而不是 401.0 錯誤,這很奇怪。日誌中的身份驗證內容相同。)
- 在應用程序池中使用本地使用者帳戶而不是網路服務,使該帳戶可以訪問目錄
- 設置“匿名”使用的不同帳戶
- 重建和重新部署應用程序(多次)
- 不同的身份驗證方案:打開 Windows 身份驗證會得到 401.1,關閉所有身份驗證會得到 401.2
- 確保 Global.asax 在正確的位置
- aspnet_royal -i
- 撕掉我所有的頭髮(適得其反)
我為這個錯誤設置了一個跟踪規則,我有一個跟踪,但我不知道如何閱讀它。我會把它貼在這裡,但它是一個相當長的 XML 文件。
錯誤來自模組 ManagedPipelineHandler,通知 ExecuteRequestHandler,處理程序 System.Web.Mvc.MvcHandler,錯誤程式碼為 0x00000000。
一個細節:此伺服器配置為使用埠 90 而不是埠 80。我不確定為什麼會導致問題,但也許會?
另一個細節:有問題的應用程序作為應用程序在“主”應用程序下的虛擬目錄中執行,該應用程序被配置為根網站。
一個新的細節:這台伺服器是 Windows Server 2008 R2,是從 Windows Server 2003 升級而來的。我相信升級過程中的某些東西可能會導致這個問題,因為對這類問題的“通常懷疑”的解決方案都沒有幫助。
所以你已經找到了解決方案,但正在尋求澄清它為什麼起作用。這可能是其中一種情況。
似乎您的網站/Web 應用程序是通過已過期的特定使用者憑據託管的。下次當您通過新憑據或應用程序通過它刪除和添加 Windows 身份驗證時,它會起作用。
在我們使用特定使用者路徑憑據託管的測試 Web 應用程序之一中,我遇到了類似的情況。每次使用者密碼更改/過期。Web 應用程序停止工作。
