Я запустил веб-сайт 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, для се причины. Теперь в случае недействительного пользователя мой сайт открывает по умолчанию Login.aspx
и перенаправляет пользователя на соответствующую страницу с ошибкой. Но пользователь может открыть любую страницу, просто набрав ее URL-адрес, потому что, конечно, не выполняется аутентификация формы, и пользователь успешно аутентифицируется Windows.
Так что мой вопрос:
Что лучше практика осуществить дополнительную проверку по базе данных поверх проверки подлинности Windows? Насколько я понимаю, мне нужно изменить Application_AuthenticateRequest
в Global.asax
?