我有一個ASP.Net MVC 5應用程序,目前使用個人身份驗證(帳戶/ login.cshtml頁面沒有身份驗證/匿名訪問)和OWIN。工作正常。ASP.Net MVC - OWIN - 允許Windows /個人身份驗證
由於這是一個Intranet應用程序,我希望允許用戶在他們的Windows帳戶,其他用戶Windows帳戶或應用程序帳戶(管理員,特殊用戶等)登錄 - 這些帳戶沒有關聯的域帳戶。
對於第一個選項,我想在登錄屏幕上顯示他們的Windows用戶名,他們只需點擊「確定」按鈕即可登錄。要獲取用戶名,我修改了Visual Studio項目屬性以禁用匿名身份驗證並啓用Windows身份驗證。還修改了web.config並將身份驗證模式設置爲Forms。這會導致「HTTP錯誤404.15 - 未找到」。這似乎是由於由OWIN引起的驗證循環,並帶有以下修復建議:
- 確保登錄控制器方法允許匿名訪問(默認情況下似乎是這種方式)。
- 或修改Startup.auth,註銷LoginPath屬性。
- 或者修改web.config,添加值爲「false」的appSetting「owin:AutomaticAppStartup」。
我選擇了LoginPath修復,這似乎工作(如web.config更改),因爲沒有錯誤,登錄頁面顯示與Windows用戶名(使用System.Threading.Thread.Currentprinciple檢索.Identity.Name)。
現在的問題是,一旦用戶登錄OwinContext沒有用戶(HttpContext.GetOwinContext()。GetUserManager())。
理想情況下,我不需要IIS或OWIN進行任何身份驗證,因爲它是由應用完成的 - 但我需要初始請求(對於帳戶/登錄頁面)包含Authenticate頭部,以便可以獲取Windows用戶。
首先我想了解是什麼導致「HTTP錯誤404.15」並修復。 其次,我如何讓OWIN與認證更改一起工作 - 我只是需要它來堅持用戶進行控制器認證。
感謝您的快速反應Phil.P.我已經嘗試了Forms和Windows身份驗證,並且都產生了相同的結果。請注意 - 我需要的所有Windows身份驗證都是在初始請求中傳遞客戶端用戶名 - 然後,如果Windows用戶在數據庫和LDAP查詢中對用戶表進行身份驗證。 –
@ Leigh.D你打算如何驗證LDAP?什麼阻止我作爲黑客來取代我通過已知Windows用戶名傳遞的內容並進行有效驗證? Windows身份驗證是指驗證實際用戶身份驗證的NTLM。您必須在「使用個人帳戶」中使用Forms,項目設置,並使用其他auth端點/中間件進行Windows身份驗證。 –