Asp.net-Mvc

401.0 - 未經授權 - 帶有 IIS 7 的 MVC 應用程序

  • July 14, 2019

我有一個通常可以正常工作的 MVC 應用程序,但在特定伺服器上,它返回 401.0“經過身份驗證的使用者無權訪問處理請求所需的資源”錯誤。

通常它是這樣工作的:

  1. 使用者登錄到一個單獨的應用程序,獲得一個使用者 ID 和令牌,點擊一個連結進入這個應用程序。使用者 ID 和令牌進入 URL。
  2. 使用者使用匿名身份驗證進入我的應用程序,然後在我們的 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 應用程序停止工作。

在此處輸入圖像描述

引用自:https://stackoverflow.com/questions/25430549