Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аутентификация пользователя, защищенное приложение как? 
V
    Опции темы
farad
Дата 20.12.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: нет
Всего: 6



Только начал изучать ASP.NET. Хочу разрешить доступ к сайту только своим. прописал пользователей и пароли в web.config, сделал проверку пароля:   
Код

const string pswc = "pswCount";//где хранить счетчик ввода паролей
 protected void bnEnter_Click(object sender, EventArgs e)
    {
        if (FormsAuthentication.Authenticate(tbUser.Text, tbPassword.Text))
        {
            FormsAuthentication.RedirectFromLoginPage(tbUser.Text,true);
        }
        else
        {
            tbPassword.Text = "";
            tbUser.Text = "";
            if (System.Convert.ToInt32(ViewState[pswc]) > 3)
            {
                Response.Redirect("denied.htm");
            }
            else
            {
                ViewState[pswc] = Convert.ToInt32(ViewState[pswc]) + 1;
            }
        }
    }
 А дальше? Ну да, при неправильном вводе пользователя выкидывает на denied.htm. Но если руками в браузере набрать адрес страницы, которую надо бы защитить то заходи нехочу. пробовал вышвыривать пользователя с защищенных страниц так: 
Код

protected void Page_Load(object sender, EventArgs e)
    {
        if(!User.Identity.IsAuthenticated)
        Response.Redirect("denied.htm");
    }
 но похоже это что-то не то, не работает нифига - куда хочешь зхаходи и без всякой аутентификации. Пример взял из микрософской книжки по подготовке к сертификационным экзаменам. Вот. Что я не так делаю? Спасибо.
PM MAIL   Вверх
Pankon
Дата 20.12.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 2
Всего: 5



самое простое - положить страницы, которые нужно защетить, в отдельный каталог и туда же фаил web.config
Код

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <authorization>
        <allow roles ="Admin,Group1"/>
        <allow  users ="User1,User2"/>
        <deny users ="*,?"/>
      </authorization>
    </system.web>
</configuration>


PM MAIL   Вверх
tol05
Дата 20.12.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Аутентификация ворм уже в ASP.NET реализована и ИМХО свой велосипед выдумывать не нужно.
- вместо твоей проверки пароля сделай Login page с элементом asp:Login. Ну и, соответственно, в конфиге и прописывай редиректы.
- User.Identity.IsAuthenticated лучше заменить на Page.User.Identity.IsInRole (если доступ только для своих)

Цитата(farad @  20.12.2007,  12:21 Найти цитируемый пост)
при неправильном вводе пользователя выкидывает на denied.htm. Но если руками в браузере набрать адрес страницы, которую надо бы защитить то заходи нехочу

для приложения в web.config пропиши
Код


<system.web>
        <authentication mode="Forms" >
            <forms loginUrl="~/Pages/Login.aspx"/>
        </authentication>

        <authorization>
            <allow roles="[роль]"/>
            <allow roles="[роль]"/>
            <allow users="[userName]"/>
            <deny users="*"/>
        </authorization>

        <roleManager enabled="true" />
    </system.web>



P.S. Пока набрал, разродился ответом, уже Pankon и ответил. Но "не пропадать же добру" !!! 

 smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
vzf
  Дата 20.12.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: нет
Всего: 5



Цитата(tol05 @  20.12.2007,  14:25 Найти цитируемый пост)
в конфиге и прописывай редиректы.


Расскажите как  ? Мне как раз это и надо, я в соседней теме спрашивал. Буду очень признателен.  smile 

--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
tol05
Дата 20.12.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



что именно "как"? smile 
MSDN-ом пользоваться умеем?  Читаем 

если нужно что-то посложнее - то подписываемся на события аутентификации (см. события елемента Login) и там делаем дополнительные проверки, редиректы и т.п.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Pankon
Дата 20.12.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 2
Всего: 5



Цитата(vzf @  20.12.2007,  16:02 Найти цитируемый пост)
Расскажите как  ? 

думаю речь об этом
Код

        <customErrors mode="RemoteOnly" defaultRedirect="pages/errorpage/genericerrorpage0.aspx">
            <error statusCode="403" redirect="pages/errorpage/genericerrorpage1.aspx"/>
            <error statusCode="404" redirect="pages/errorpage/genericerrorpage2.aspx"/>
        </customErrors>


Это должно быть в web.config в каталоге веб-приложения
PM MAIL   Вверх
vzf
Дата 21.12.2007, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 10.9.2005

Репутация: нет
Всего: 5



посмотрел про контрол <asp:login> в мсдн. Не нашел то что мне нужно.

То, что привел Pankon почти то что мне надо. Проблема в том как сделать, чтобы, если пользователю не разрешается доступ к странице, ему возвращали 403 ошибку и соответственно был редирект на указанную страницу ошибки. Я указал секцию, что привел Pankon в web.config . Если запросить несуществующий ресурс (404 ошибка) то все ОК. Но если пользователь запрашивает страницу на которую у него нет прав, то его попрежнему перенаправляют на login.aspx .

Может я путанно объясняю. Попробую поподробней. Мне необходимо добиться следующего:

Пользователь проходит аутентификацию (form-based например) попадает на главную страницу сайта (Default.aspx) . Помимо этой страницы есть еще страница Test.aspx и к ней имеют доступ только определенные пользователи. Пусть пользователь аутентифицировался удачно, но он не имеет доступа к Test.aspx . Надо сделать так, что если он запросит Test.aspx его бы перенаправили на страницу с ошибкой.

Можно ли это прописать в конфигах или это можно сделать только программно (проверять на странице и делать Responce.Redirect("ErrorPage.aspx")); ? 

--------------------
Java - Write Once, Test EveryWhere!
PM MAIL   Вверх
farad
Дата 21.12.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: нет
Всего: 6



vzf, подожди, это моя тема smile 
Pankon, tol05, спасибо, в принципе я так и делал. разобрался почему доступ ко всем страницам был  
Код

if (FormsAuthentication.Authenticate(tbUser.Text, tbPassword.Text))
        {
            FormsAuthentication.RedirectFromLoginPage(tbUser.Text,false);//стоял параметр true и меня "запомнили"
        }

теперь другая проблема: пока не пройдешь проверку нет доступа вообще ни к каким страницам. Хотелось бы иметь некоторое количество общедоступных страниц, хотя бы страницу доступ запрещен.. файл web.config такой:
Код

    <authentication mode="Forms">
      <forms
        loginUrl="login.aspx">
        <credentials passwordFormat="Clear">
          <user name="guest" password="123456"/>
        </credentials>
      </forms>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>


Pankon, предлагал поместить всю защищенную байду в отдельную папку, но студия не дает запихнуть в эту папку web.config, ругается на стройки IIS, которых я и не проводил. Собственно я его и не устанавливал. localhost создается студией. Как-то студию образумить можно? Или в web.config можно обозначить какие-то доступные страницы?
PM MAIL   Вверх
tol05
Дата 21.12.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



vzf, 
Цитата(vzf @  21.12.2007,  01:33 Найти цитируемый пост)
Пусть пользователь аутентифицировался удачно, но он не имеет доступа к Test.aspx . Надо сделать так, что если он запросит Test.aspx его бы перенаправили на страницу с ошибкой.

ИМХО только программно. В конфиге прописывать строки типа:
- если user1 залогинен и хочет 1.aspx, то пустить
- если user1 залогинен и хочет 2.aspx, то редирект на 3.aspx
- если user1 не залогинен и хочет 3.aspx, то то редирект на 2.aspx
- если user1 не залогинен и ...
- если user2 ...
...

Мне кажется - это черезчур ... даже для MS. smile

Используй класс FormsAuthentication

теперь автору темы smile
Вариант 1. В корневом конфиге пишем обычную аутентификацию, для всех.
Код

<system.web>
        <authentication mode="Forms" >
            <forms loginUrl="~/Login.aspx"/>
        </authentication>

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

        <roleManager enabled="true" />

    </system.web>

пользователь логинится и вроде все ок... НО ... 
например, на сайте есть папка Pages со страницами, доступ к которым разрешен только юзеру user1 и никому больше. (даже админ сайта не может их смотреть smile). В папке Pages создаем свой web.config и там пишем
Код

<configuration>
    <system.web>
        <authorization>
            <allow users="user1" />
            <deny roles="admin" />
<!-- ну  и всех остальных (кого там нужно?) тоже запретить -->
        </authorization>
    </system.web>
</configuration>

Вариант 2. из конфига все убираем. И он станет пускать на общедоступные страницы. Но и на все остальные тоже smile
Чтобы запретить доступ на "все остальные" или пишем свой модуль аутентификации, или на каждой странице используем программную аутентификацию, через тот же FormsAuthentication.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
farad
Дата 21.12.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: нет
Всего: 6



tol05, иез, заработала  smile сплюсами проблем - правов не хватает..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.