Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Защита


Автор: Vit 15.4.2007, 04:18
Раскажите мне вкратце принципы защиты страниц. Поясняю: как обычно на любом сайте вводишь логин и пароль и становятся доступны защищённые странички. Как проверить логин и пароль я знабю, вопрос в том что имеется какая-то защищённая страничка, как на ней на onLoad определить что пароль на странице логина был введен правильный? Я так понимаюб что в этом случае используются сессионные переменные или куки, а вот простой примерчик можно привести?

Автор: Mymik 15.4.2007, 09:00
Vit, Как правило в защищенных куках храниться только лишь Username данного пользователя. А дальше идет уже либо коннект к СУБД (при каждой загрузки страницы) либо хранение пользовательских ролей в каше или сессии(хранение ролей в куках еще не встречал (попросту глупо давать пользователю доступ к его ролям)) либо определение роли при Application_BeginRequest. Т.е. непосредственно там роли и выставляются.
В asp.net 2.0 реализуется данный функционал через Membership API.
В web.config создается два провайдета: membership и roleManager Первый провайдер отвечает за пользователей, второй за их роли.
К примеру для проверки пользователей используется
Код

Membership.ValidateUser(login, password);

После проверки пользователя мы делаем 
Код

FormsAuthentication.RedirectFromLoginPage(UserLogin, true);

Этим мы и создаем данные с которыми мы потом будем работать.
В последствии мы можем обращаться к имени пользователя с помощью 
Код

Membership.GetUser().Username;

А для доступа ролям в которых находится пользователь мы используем 
Код

Roles.GetUsersInRole(username);

Этой строкой мы и получаем все роли пользователя.

В asp.net 1.0 реализуется это дело несколько по иному. В принципе как и раньше мы делаем Валидацию пользователя (правда руками. Т.е. создаем сами соединение к базе там это все проверяем и возвращаем bool значение)

Дальше мы все так же создаем куки
Код

FormsAuthentication.RedirectFromLoginPage(UserLogin, true);


После чего мы имеем доступ к имени пользователя с помощью
Код

HttpContext.Current.User.Identity.Name


После этого создаем соединение с СУБД и запрашиваем роли для данного пользователя.
и после этого исправляем пользователя
Код

System.Security.Principal.IIdentity username = HttpContext.Current.User.Identity;
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(username, (string[])userRoles);


вот и все. Вот так вот реализуется политика на сайте написаном на asp.net

P.S. если тебе нужно просто пользователя проверить тогда тебе на странице Login нужно выполнить строчку
Код

FormsAuthentication.RedirectFromLoginPage(UserLogin, true);

(Примечание: страница с которой ты выполняешь вызов данного метода должна быть прописана в web.config в разделе authentication)
И после этого запрашиваешь пользователя либо с помощью Membership либо с помозщь User

Автор: Exception 15.4.2007, 17:28
http://msdn2.microsoft.com/en-us/library/ms998347.aspx

Автор: Vit 15.4.2007, 20:45
А чем плох вариант если я на форме с логином буду устанавливать какой-то флажок в сессионных переменных и на onLoad остальных форм проверять этот флажок? Это чревато какими-то подводными камнями? 

Автор: Mymik 15.4.2007, 21:55
Цитата(Vit @  15.4.2007,  20:45 Найти цитируемый пост)
А чем плох вариант если я на форме с логином буду устанавливать какой-то флажок в сессионных переменных и на onLoad остальных форм проверять этот флажок? Это чревато какими-то подводными камнями?  

После закрытия бразуера сессия умрет. И пользователю надо будет по новой заходить на логин-форму и вводить свои данные. В то время как cookie сохраняться в его браузере. Это типа функции "запомить вас" на форуме.

Автор: Vit 15.4.2007, 21:57
Цитата(Mymik @  15.4.2007,  12:55 Найти цитируемый пост)
После закрытия бразуера сессия умрет. И пользователю надо будет по новой заходить на логин-форму и вводить свои данные. В то время как cookie сохраняться в его браузере. Это типа функции "запомить вас" на форуме. 



Если только это, то меня это пока устраивает, мне надо сейчас реализовать именно это.

Автор: Vit 16.4.2007, 02:11
Вопрос решён, всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)