Проверка подлинности 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 который генерируется для каждого входящего запроса, однако в идеале вы должны проверять авторизацию (не аутентификацию), когда веб-приложение намеревается выполнить действие, а не превентивно на каждый запрос.

Другие вопросы по тегам