我運行一個使用表單身份驗證的ASP.NET網站。事實上,用戶不必輸入任何內容 - 我用Request.ServerVariables["LOGON_USER"]
並在某個SQL數據庫中使用自定義類EmployeeInfo
查找了此用戶名,然後根據結果將用戶重定向到默認頁或顯示不同消息的錯誤頁對錯誤的類型:Windows身份驗證自定義驗證(來自數據庫)
Web.config文件:
<authentication mode="Forms">
<forms loginUrl="Login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
的Login.aspx:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
FormsAuthentication.SignOut();
string UserName = Request.ServerVariables["LOGON_USER"];
EmployeeInfo CurrentEmployee = EmployeeInfo.RequestDBInfo(UserName); // SQL magic here
if (CurrentEmployee = null)
Response.Redirect("AccessDenied.aspx?Message=NoInfo");
else
if (CurrentEmployee.Suspended = true)
Response.Redirect("AccessDenied.aspx?Message=Suspended");
if (CurrentEmployee.Expired = true)
Response.Redirect("AccessDenied.aspx?Message=Expired");
if (CurrentEmployee.Position = null)
Response.Redirect("AccessDenied.aspx?Message=NoPosition");
else
FormsAuthentication.RedirectFromLoginPage(CurrentUserName, true);
}
}
這是工作好直到最近,我們不得不切換到Windows身份驗證SE好奇的原因。現在,如果用戶無效,我的網站默認會打開Login.aspx
頁面,並將用戶重定向到相應的錯誤頁面。但是用戶只需輸入URL即可打開任何頁面,因爲當然不會執行表單身份驗證,並且用戶可以通過Windows驗證身份。
所以我的問題是:
什麼是在Windows上實現身份驗證的頂部通過數據庫附加檢查的最佳實踐?據我所知,我需要改變Application_AuthenticateRequest
在Global.asax
?