Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к лаб раб web-программирование.doc
Скачиваний:
457
Добавлен:
07.06.2015
Размер:
4.4 Mб
Скачать

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

  1. Изучить оболочку Visual Studio

  2. Рассмотреть палитру элементов управления и визуальных компонент

  3. Выполнить учебный проект

  4. Согласно вариантам выполнить индивидуальное задание:

Разработать приложение, содержащее две формы с использованием указанных элементов и обрабатывающее полученные данные с выдачей результатов. Добавить вывод клиенту указанных переменных окружения (Request["REMOTE_ADDR"];).

Вариант

Элемент диалога

Элемент диалога

Переменная окружения

Переменная окружения

1

Label

CheckBox

AUTH_TYPE

CONTENT_LENGTH

2

ListBox

RadioButton

CONTENT_TYPE

GATEWAY_INTERFACE

3

Password

Select

REMOTE_ADDR

REMOTE_HOST

4

Hidden

RadioButton

REMOTE_USER

REQUEST_METHOD

5

TextBox

HyperLink

SCRIPT_NAME

SERVER_NAME

6

LinkButon

Select

SERVER_PORT

SERVER_PROTOCOL

7

CheckBoxList

ListBox

SERVER_SOFTWARE

HTTP_USER_AGENT

8

DropDowList

LinkButton

REMOTE_HOST

AUTH_TYPE

9

Calendar

TextBox

REQUEST_METHOD

CONTENT_TYPE

10

BulletedList

Label

CONTENT_LENGTH

SERVER_PORT

11

LinkButton

TextBox

SERVER_PROTOCOL

SCRIPT_NAME

12

Hidden

Select

HTTP_USER_AGENT

REMOTE_USER

13

CheckBox

ListBox

SERVER_NAME

SERVER_PORT

14

Password

Literal

GATEWAY_INTERFACE

REMOTE_ADDR

15

ImageButton

TextBox

REMOTE_HOST

HTTP_USER_AGENT

Примечание:

Преобразование строки в число: int result = int.Parse(TextBox1.Text) * 2;

Работа с сессией:

protected void LinkButton1_Click(object sender, EventArgs e)

{

Session["myvariable"] = "value1"; // запись значения в сессию

Response.Redirect("~/my2.aspx"); // переадресация на страницу my2.aspx

}

my2.aspx

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

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

Лабораторная работа №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”