среда, 1 августа 2012 г.

Аутентификация форм ASP.NET

Аутентификация на основе форм, пожалуй одна из самых доступных процедур ограничения доступа клиентов к вэб приложению. С чего же начать?...

Во-первых определим необходимые настройки в файле web.config. Нас будут интересовать разделы authentication и authorization.

<authentication mode="Forms">
 <forms name="appCookieName" loginUrl="Login.aspx" cookieless="AutoDetect">
  <credentials passwordFormat="Clear">
   <user name="user" password="passw"/>
  </credentials>
 </forms>
</authentication>

<authorization>
 <deny users="?"/>
</authorization>

Первым делом укажем ASP.NET использовать аутентификацию форм в поле mode. Дальше в поле name зададим кук-набор (контейнер на стороне браузера)  в котором после регистрации будут храниться учетные данные (так называемый мандат аутентификации). Страницу для ввода учетных данных определим в поле loginUrl. Пользователей имеющих доступ к приложению зададим в подразделе credentials, и конечно закроем доступ анонимным пользователям в разделе authorization. На этом первая часть конфигурации завершена.

Теперь нужно создать страницу ввода учетных данных. Я использую для этого пустую страницу aspx и вэб контрол Login в качестве шаблона.

На заключительной стадии остается определить метод Authenticate, в котором собственно  и происходит проверка пользователя:

protected void Login_Authenticate(object sender, AuthenticateEventArgs e)
{
    Page.Validate();
    if (!Page.IsValid) return;

    string user = Login.UserName;//пользователь
    string pass = Login.Password;//пароль

    if (FormsAuthentication.Authenticate(user, pass))
    {
        e.Authenticated = true;
        FormsAuthentication.RedirectFromLoginPage(user, false);
    }
    else { e.Authenticated = false; }
}

Если аутентификация пройдена успешно перед выходом из метода свойство Authenticated устанавливается в значение true. Метод RedirectFromLoginPage задает переход на страницу пользователя. По умолчанию это Default.aspx. Но можно указать и явное значение в поле defaultUrl="" тега forms в файле web.config.