Проверка подлинности Windows в веб-формах с удаленной базой данных SQL
У меня есть веб-приложение ASP.NET 4.0, которое использует проверку подлинности Windows для AD и SQL Server для управления ролями.
По сути, я хочу, чтобы все пользователи, имеющие учетную запись AD, имели доступ к приложению, но я хочу дополнительно защитить приложение, используя роли в Sql Server. Я не хочу, чтобы пользователи вводили свои пароли для аутентификации.
Это жизнеспособно для меня, чтобы проверить аутентификацию в методе Global Application_Start, или я должен выполнить этот код в другом месте?
2 ответа
После дальнейших исследований я обнаружил "Application_AuthenticateRequest", который, я думаю, послужит моим целям использования аутентификации Windows и настройки роли Sql Server.
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
// just grab the username without domain info
string[] arrTmp = HttpContext.Current.User.Identity.Name.Split('\\');
string username = arrTmp[arrTmp.Length - 1];
// Create an array of role names
List<String> arrlstRoles = new List<String>();
// work-around
if (username == "fakename")
arrlstRoles.Add("Admin");
// Add the roles to the User Principal
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(User.Identity, arrlstRoles.ToArray<String>());
}
}
Application_Start
срабатывает только один раз, когда само приложение инициализируется. HttpContext.Current.User
будет содержать сведения о пользователе, выполняющем HTTP-запрос, который заставил IIS инициализировать приложение.
Вместо этого используйте Application_BeginRequest
который генерируется для каждого входящего запроса, однако в идеале вы должны проверять авторизацию (не аутентификацию), когда веб-приложение намеревается выполнить действие, а не превентивно на каждый запрос.