Лабораторная работа №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
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.