Авторизация. Поддержка сеанса пользователя

  • doc
  • 11.05.2020
Публикация в СМИ для учителей

Публикация в СМИ для учителей

Бесплатное участие. Свидетельство СМИ сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 180. Авторизация. Поддержка сеанса пользователя.doc

Лабораторная работа №12

 

Авторизация. Поддержка сеанса пользователя

 

         Цель работы: изучение возможностей технологии ASP.NET при разработке безлопастных приложений.

 

Теоретические сведения

 

Важная часть многих web-приложений — возможность контролировать доступ к ресурсам. Безопасность проекта вращается вокруг двух концепций — аутентификации и авторизации. Аутентификация — процесс определения личности пользователя. Авторизация — процесс определения прав пользователя на доступ к определенным ресурсам, на просмотр некоторых разделов, на возможность редактирования информации и так далее.

Для авторизации пользователь вводит пользовательское имя, под которым зарегистрирован(а), и пароль. После этого приложение определяет возможность доступа к ресурсам, а также может видоизменять как внешний вид с помощью тем, так и содержание генерируемых страниц. К примеру, в форуме записи могут показываться в виде дерева или линейно.

В ASP .NET 2.0 аутентификацией управляют с помощью службы Membership, которая позволяет определить различные виды членства на сайте. Информацию о членах можно хранить в различных местах - в базах данных, текстовых файлах или даже в учетных записях Windows. Конфигурировать членство можно индивидуально для каждого пользователя или на основе ролей с помощью сервиса Role Manager. Роли облегчают конфигурирование, так как можно создавать роли и потом добавлять пользователей к готовым ролям. Любому пользователю может принадлежать любое количество ролей.

По умолчанию службы используют провайдера AspNetSqlProvider. В таком случае ASP .NET автоматически создает базу данных ASPNETDB.MDF в директории проекта App_Data, когда запускается команда ASP.NET Configuration — или программно, или с помощью элементов управления группы Login задействуются службы Membership или Role Manager. Служба Membership также обеспечена провайдером, работающим с Active Directory.

Создать пользователей и назначить им роли можно во встроенном приложении ASP .NET Configuration. Информация о пользователях хранится в таблицах aspnet_Users, aspnet_UsersInroles, aspnet_Membership. Пароли хранятся в зашифрованном с помощью хэш-функции виде. Даже администратор не может его подсмотреть. Пароль, который вводится в момент аутентификации, тоже хэшируется и сравнивается со значением в базе. Хранение в незашифрованном виде - это угроза безопасности.

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

В этом приложении можно также создавать правила доступа.

Настройки конфигурации служб Membership и Role Manager, конечно же, записываются в файл Web.config:

   <roleManager enabled="true" />

Таким образом включается служба Role Manager.

Элемент authentication mode определяет способ аутентификации. Если это Forms, то свои имя и пароль пользователь вводит в форме. В локальной сети (интранет) можно аутентифицировать пользователей по их учетной записи, тогда его значение ставится как Windows.

С помощью элемента authentication запускается служба Membership:

    <authentication mode="Forms">

      <forms loginUrl ="Login.aspx"/>

    </authentication>

При значении Passport пользователи авторизуются с помощью паспорта от Microsoft.

При аутентификации с помощью форм пользователи получают доступ к страницам в зависимости от данных, введенных на форме. До входа на сайт пользователь считается анонимным и используется анонимная аутентификация.

Всего у элемента forms 8 возможных атрибутов:

name

Определяет имя файла- cookie, который посылается пользователям после аутентификации. По умолчанию он называется .ASPXAUTH

loginUrl:

URL страницы, с которой можно войти в систему. По умолчанию это Login.aspx

protection:

Уровень защиты файла- cookie на пользовательской машине. Возможные значения — All, None, Encryption, и Validation

timeout:

Время, по истечении которого cookie устаревает. Значение по умолчанию — 30 минут

path:

Путь к файлам cookie

requireSSL:

Нужно ли шифровать данные по протоколу SSL

slidingExpiration:

Если True, то cookie устаревает через период времени timeout после последнего запроса. Иначе — через период времени timeout после создания

cookieless:

Место хранения идентификатора пользователя. Значение по умолчанию useDeviceProfile

 

По умолчанию всем пользователям доступны все страницы приложения. Если нужно ограничить доступ пользователей к какой-нибудь странице, в Web.config вводится запись:

  <location path="Admin.aspx">

    <system.web>

      <authorization>

        <allow roles="Admin" />

        <deny users="*" />

      </authorization>

    </system.web>

  </location>

Значение "?" обозначает анонимного пользователя, а "*" — всех пользователей:

        <allow users="?" />

В элементах allow и deny пользователи и роли могут быть заданы перечислением:

        <allow users="Alex, Dave" />

Элемент location определяет часть сайта, доступ к которой нужно ограничить. В данном случае это одна страница Admin.aspx. Первая часть авторизации разрешает доступ к ней пользователям в роли администратора Admin. Вторая запрещает доступ всем остальным пользователям.

Если элемент system.web находится в корневом узле файла, то вложенный в него узел authorization определяет настройки доступа ко всему сайту.

Когда неавторизованный пользователь пытается получить доступ к странице, открывается форма, определенная в атрибуте forms loginUrl. Если он введет имя и пароль пользователя, который имеет доступ к странице, то она откроется, иначе опять ему или ей будет показана форма логина.

Часто бывает нужно сконфигурировать с точки зрения безопасности систему навигации. Это значит, что меню не должно показывать те страницы, для просмотра которых пользователь не авторизован:

    <siteMap defaultProvider="AspXmlSiteMapProvider"

enabled="true">

      <providers>

        <clear/>

        <add name="AspXmlSiteMapProvider"

type="System.Web.XmlSiteMapProvider, System.Web,

Version=2.0.3600.0, Culture=neutral,

PublicKeyToken=b03f5f7f11d50a3a"

          siteMapFile="web.sitemap"

securityTrimmingEnabled="true"/>

      </providers>

    </siteMap>

Здесь атрибут securityTrimmingEnabled, установленный в true, заставляет провайдера карты сайта фильтровать узлы в зависимости от роли пользователя. Это значит, что в элементах навигации будут видны только доступные страницы.

Член User страницы позволяет получить доступ ко всей информации, касающейся текущего пользователя.

Метод IsInRole определяет, принадлежит ли пользователь к роли:

  if (User.IsInRole("Admin"))

      Page.Title = "Hello, Administrator!";

Свойство Identity дает информацию об аутентификации пользователя:

if (User.Identity.IsAuthenticated)

//выполнить код, если пользователь легален

User.Identity.AuthenticationType показывает способ авторизации, установленный в Web.config.

Можно ограничить доступ не только к страницам, но и к частям страниц.

Элементы управления группы Login

Мы уже создавали формы регистрации. Это было только упражнение, так как элементы управления этой группы могут брать на себя регистрацию и авторизацию пользователей, восстановления пароля и другие функции, взаимодействуя при этом с системой Membership и Roles. Группа Login находится в панели инструментов.

Элемент управления LoginName позволяет показать имя пользователя:

Заходите еще, <asp:LoginName ID="FCLoginName" Runat="server" />

Отображаемый текст можно форматировать с помощью FormatString:

<asp:LoginName ID="HelloLoginName" Runat="server" FormatString="Hello, {0}" />.</p>

LoginStatus — это умный элемент управления. Если пользователь не аутентифицирован, отображается гиперссылка Login на страницу входа на сайт. Если пользователь авторизован, это ImageButton с командой Logout. Если ее нажать, то пользователь выходит из системы. Текст ссылок можно менять в свойствах LoginText и LogoutText или использовать изображения:

  <asp:LoginStatus ID="LoginStatus1" runat="server"

LoginText="Вход" LogoutText="Выход" />

  <asp:LoginStatus ID="LoginStatus2" runat="server"

LogoutAction="Redirect" LogoutPageUrl="~/Default.aspx"

LoginImageUrl="~/Images/arrow_next.gif"

LogoutImageUrl="Images/arrow_prev.gif" />

Нажатие на ссылку Logout в этом случае перенаправит пользователя на страницу Default.aspx.

Элемент управления LoginView состоит из двух шаблонов: AnonymousTemplate и LoggedInTemplate. Который из них используется для отображения, зависит от того, просматривает ли страницу анонимный пользователь или авторизованный.

СreateUserWizard позволяет создавать пользователей, используя службу Membership. Естественно, в нем происходит валидация введенных данных. Например, длина пароля должна быть не меньше 7 знаков и в нем должен присутствовать хотя бы один символ — не буква и не цифра. Обязательно заполнение контрольного вопроса и ответа, по которым можно будет восстановить пароль, если он забыт, или изменить пароль

Персонализация

Многие сайты собирают информацию о пользователях, чтобы подстроить показ информации под их личные вкусы. Часто для этого используют файлы-cookie, объекты приложения и сессии.

В ASP .NET 2.0 появились новые удобные способы хранить пользовательскую информацию. Это функция персонализации. Механизм персонализации позволяет установить прямую связь между пользователем и всеми данными, относящимися к нему. При этом его настройки хранятся не в файлах-cookie на компьютере пользователя, которые он может стереть, а на сервере. Их можно поместить в любое хранилище данных.

Модель персонализации проста и расширяема.

В файле web.config содержится информация о том, какие данные о пользователе необходимо хранить. Она записывается в секции <configuration><system.web> перед секцией authentication:

    <profile>

      <properties>

        <add name="FirstName" />

        <add name="LastName" />

        <add name="LastVisited" />

        <add name="Age" />

        <add name="Member" />

      </properties>

    </profile>

Профиль персонализации может хранить данные об авторизированном пользователе, но может обслуживать и анонимного пользователя. По умолчанию анонимная персонализация выключена. Чтобы ее включить, нужно в файле web.config создать запись

    <anonymousIdentification enabled="true" />

(также в секции <system.web>).

Когда анонимная персонализация включена, ASP .NET хранит уникальный идентификатор для каждого анонимного пользователя. Он посылается вместе с любым запросом. Идентификатор хранится в файле-cookie пользователя, а дополнительные данные, которые удалось собрать о его предпочтениях, — на сервере. По умолчанию имя файла-cookie — .ASPXANONYMOUS. Его можно поменять с помощью атрибута cookieName элемента anonymousIdentification:

    <anonymousIdentification enabled="true" cookieName=".intuit"/>

Время хранения файла-cookie в минутах определяется атрибутом cookieTimeout.

По умолчанию оно равно 100 000 минутам (69,4 дня).

От использования cookie можно отказаться, например, написав

cookieless="UseUri"

В таком случае идентификатор передается через строку URL:

cookieless="AutoDetect"

В этом случае определяются настройки пользователя. Если возможность хранить cookie выключена, используется строка URL.

Анонимный идентификатор по своей сути представляет собой GUID (32-байтное число, алгоритм генерации которого гарантирует глобальную уникальность). Свойство AnonymousId объекта Request страницы позволяет получить к нему доступ.

Для того чтобы определить, какие данные можно хранить для анонимного пользователя, в элемент add name определяют атрибут allowAnonymous:

        <add name="LastVisited" allowAnonymous="true"/>

 

Пример использование компонентов  Login , UserWizard

для авторизации пользователей (Toolbox - Login)

  

 

 


«LoginStatus»: Cвойства (EnableViewState – True).  «Login»: Свойство (CreateUser Text – Create new)

 


Для  Log In :

 

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void Login1_LoggedIn(object sender, EventArgs e)

    {

        bool is_admin = Roles.IsUserInRole(Login1.UserName, "admin");

       

        if (is_admin) Response.Redirect("~/admin/admin.aspx");

        else Response.Redirect("~/user/user.aspx");

        

    }

   }

 

На форме Regist/ login.aspx использование  компонента «UserWizard»:  

Свойство ContinueDestinitionPageUrl и FinishDestinitionPageUrl :  ~/Default.aspx

 

Для события CreatedUser выбрать CreateUserWizard1

 

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)

    {

        Roles.AddUserToRole(CreateUserWizard1.UserName, "user");

       

    }

 

Настройка доступа и пользователей: ASP.NET Configuratio:

 

 

 

 

 

Назначить пользователям роли (Manager users).

Установить права на каталоги:

 

 

 

Настройка файла Web.config :

 

Web.config

<connectionStrings/>

         <system.web>

 

  <roleManager enabled="true" />

  <compilation debug="true">

                   </compilation>

         <authentication mode="Forms">

         <forms defaultUrl="default.aspx" loginUrl="~/register/login.aspx"></forms>

          </authentication>

 

Использование Cookie и Session:

Default.aspx

using System.Web.SessionState;

protected void Button1_Click(object sender, EventArgs e)

    {

    TextBox1.Text = Session.SessionID;

 

if ((Response.Cookies["myCookie"] == null) ||

   (Response.Cookies["myCookie"].Value == null))

        {

            HttpCookie objCookie = new HttpCookie("myCookie", TextBox2.Text);

            //objCookie.Values.Add("value_cookie", "11");

            objCookie.Expires = DateTime.Today;

            Response.Cookies.Add(objCookie);

        }

Label1.Text = Response.Cookies["myCookie"].Value;

 

}

protected void LinkButton1_Click(object sender, EventArgs e)

    {Session["myvariable"] = "value1";

        Response.Redirect("~/user/user.aspx");

    }

 

В др. модуле считать сессию:

 

  if (Session["myvariable"] != null)

     //   { Label1.Text = (string)((ArrayList)Session["myvariable"])[0]; }

    { Label1.Text = (string)(Session["myvariable"]); }

        else { Label1.Text = " null"; }

 

Задание на работу

 

1     Рассмотреть возможности технологии ASP.NET  для разработки защищенного приложения

2     Выполнить учебный проект (см. пример использования)

3     На основе лабораторной работы 3 разработать структуру приложения  для разных групп пользователей (например, admin и user), выделив отдельные папки для каждой роли пользователей.

4     Реализовать работу с БД пользователей для выполнения основных операций добавления, удаления и редактирование в режиме администратора. Использовать все элементы управления из ToolBox раздела “Login

 


Скачано с www.znanio.ru