настраиваемая аутентификация в asp.net - PullRequest
1 голос
/ 24 июня 2011

Каков наилучший способ настроить проверку подлинности для пользовательской базы данных пользователей в ASP.NET?Мои текущие настройки не очень хороши, и я уверен, что есть лучший способ сделать аутентификацию, но все, что я могу найти, это некоторые статьи, которым семь или восемь лет.Моя текущая настройка выглядит следующим образом:

  • Приложение использует имя пользователя Windows (через проверку подлинности Windows), чтобы определить, находится ли пользователь в базе данных разрешенных пользователей.Это делается с помощью вызова метода Authenticate в Page_Load.
  • Если пользователь не входит в число разрешенных пользователей, страница перенаправляется на экран входа в систему.

Недостатокс этим методом он вызывает:

Response.Redirect("~/login.aspx", false)

, который выполняет все тело метода Page_load.Есть ли лучший способ сделать аутентификацию?Будет ли работать что-то вроде пользовательских классов Page или HTTPModules?

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Вы можете выполнить проверку раньше в запросе, как в OnInit, или вы можете сделать что-то более надежное, например, реализовать собственный членский член: Статья MSDN / Видеоруководство

0 голосов
/ 27 июня 2011

Ладно, так я и сделал.Я написал этот класс, который наследуется от System.Web.UI.Page.Я переопределяю событие OnInit, и именно здесь происходит аутентификация (поиск имени пользователя Windows по базе данных пользователей).Если пользователь не проходит аутентификацию, для isTerminating устанавливается значение true, а событие OnLoad запускается только в том случае, если isTerminating равно false.Я попытался оставить Response.Redirect со вторым параметром, установленным в false, сам по себе, но он по-прежнему выполнял все последующие события страницы.(даже при вызове HttpApplication.CompleteRequest())

public class BasePageClass : Page
{
    private bool isTerminating = false;

    protected override void OnInit(EventArgs e)
    {
        isTerminating = !AuthenticationManager.Authenticate();

        base.OnInit(e);
    }

    protected override void OnLoad(EventArgs e)
    {
        if (!isTerminating)
        {
            base.OnLoad(e);
        }
    }
}

Я понятия не имею, лучше ли выполнять запуск события OnLoad, но, похоже, он работает нормально.

...