Туплю - FormsAuthentication в ASP.NET

vijrel7878

ЗАДАЧА: сделать формс аутентификацию.
Имплементация: делается каталог с login page и public page, в этом какталоге защищенный каталог.
В защищенном Web.config
<authentication mode="Forms" />
<authorization>
<deny users="?" />
</authorization>
В открытом
<authentication mode="Forms">
<forms loginUrl="/Открытый/Login.aspx">
<credentials passwordFormat="Clear">
<user name="name" password="pass" />
</credentials>
</forms>
</authentication>
При заходе на страничку в открытом каталоге вызывается по клику Response.Redirect("закрытый/моя станичка.aspx");
Затем это хозяйство идет на logn page, там вводиться логин/пароль и делается
if (FormsAuthentication.Authenticate (NameEdit.Text,PassEdit.Text
FormsAuthentication.RedirectFromLoginPage (NameEdit.Text, false);
else Output.Text = "Invalid login";
Так вот
ЭТОТ РЕДИРЕКТ ХОТЬ УБЕЙ НЕ РАБОТАЕТ!
куки у меня включены в браузере. В чем фишка - не пойму. Под отладчиком направляется на верный url, но не переходит. Снова на login page оказывается.
Может в закрытой страничке нужно какие-то ждействия предпринимать?

hov77

может нехватает параметров-аттрибутов ?
вот отрывок :
http://www.aspnetmania.com/Articles/Article/47.html#IDA54C
Выше были описаны все возможные атрибуты раздела forms,но для корректной работы приложения достаточно использовать лишь 3 из них, как это показано в следующем листинге:
<forms name=”ASP_XML_Form” loginUrl=”login.aspx” protection=”All” />
name – имя cookie-файла, в который будут внесены данные об успешном прохождении аутентификации
protection – принимает значения All|None|Encryption|Validation и определяет способ защиты данных в cookie-файлах. Из допустимых значений видно, что можно ничего не делать с полученными данными и принимать их такими, какие они есть; можно сверять их; можно шифровать; а также есть возможность объединить верификацию с криптографией – такое значение используется по умолчанию.
полный вариант


<authentication mode=”Forms”>
<forms name=”ASP_XML_Form” loginUrl=”login.aspx” protection=”All” timeout=”30” path=”/”
requireSSL=”false” slidingExpiration=”true”>
<credentials passwordFormat=”Clear”>
<user name=”John” password=”one”/>
<user name=”Mike” password=”two”/>
<user name=”Bill” password=”three”/>
</credentials>
</forms>
</authentication>


Кстати Cookie при авторизации точно создается ?

vijrel7878

неуказанные атрибута, если не ошибаюсь, берутся из machine.config

hov77

Интересно, а файл cookie при авторизации вообще создается ?

vijrel7878

ага, мне тоже это интересно. По коду по крайней мере создается

hov77

Ну так глянь, не появился ли файл с датой = времени регистрации ...

vijrel7878

а где они хранятся?

hov77

у меня тут (для IE): C:\Documents and Settings\Administrator\Cookies
C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files

vijrel7878

наверное удивишься, но у меня нет такого пути

stm6726800

Ты под линухом ?
если нет, то должен быть ...
Диск где стоит винда:\ Document and Settings\{username}\Local Settings\Temporary Internet Files
В качестве {username} твой логин в винде ...

vijrel7878

ну какой под линухом asp.net? win2k3
пожалуйста, для неверующих

Dasar

включи показ hidden директорий и файлов

hov77

mono
по картинке я так понял скрытые папки не отображаются...

vijrel7878

да, это уже клиника (это я про себя)
блин, не нету этого куки...
а какого спрашивается он не пишется

vijrel7878

а он точно из под vs у меня туда должен писатся?

hov77

х.з. , я бы попробовал для начала просто создать куку какую-нибудь из существующего webapplication и зачитывать.
и аттрибуты все-таки попробовать указать name и protection , непонятно почему в статье написано 'достаточно 3-х', можно было по идее написать что достаточно одного. Тем более name - имя cookie файла, близко к проблеме...

xz_post

а вот это работат ?
E:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\QuickStart\aspplus\samples\security\userauth\cs

vijrel7878

в общем кука создается, посмотрел

vijrel7878

блиииииииин, работает. Ща буду изучать

vijrel7878

СПАСИБО!
наконец-то и у меня заработало!
вот только непонятно, почему это не хочет работать если делать не как script, а как Codebehind методом?

xz_post

Codebehind должен работать. Вот тот же пример, переделанный в проект VS
(нужно переименовать в rar)

vijrel7878

а пришли почтой, если несложно

hov77

чего-то не хочет сохранять

xz_post

У меня нет интернета. Нужно пользоваться оперой (или System.NEt.WebClient).
см ftp://10.0.0.178/in

freezer

а сжать zip'ом и выложить по-человечески было не судьба?..

xz_post

Блин, не знал я про возможность закачки zip - файлов...

freezer

там же русским языком написано, "В настоящее время можно загружать файлы с раширением .gif, .jpg, .png и .zip размером не больше 256Кб. "

vijrel7878

спасибо, все заработало.
Наверное вредно по 16 часов подряд заниматся программированием - на ровном месте начинаешь тупить

hov77

Так где грабли лежат ?

vijrel7878

я пытался это дело сделать используя 2 каталога: закрытый и открытый. В примере же все сделано на одном каталоге. А так проще. Поэтому я просто сделал так как в примере, да и все.
Может так как я до этого делал и нельзя было сделать...

freezer

а с каталогами какая проблема?.. <location path=...> - и вперед!

vijrel7878

ну смотри мой самый первый пост. Пути у меня прописаны были. А в чем проблемы была - меня уже достало разбиратся

freezer

web.config один надо делать, для каждого каталога - свой раздел <location> ...
или я чего-то не понимаю?

vijrel7878

а я location вообще не трогал. Все делал заданием authentication и authorization

freezer

короче, я так сделал: (все работает!)
в основном каталоге http://10.0.1.119/polls/default.aspx


<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<system.web>
<compilation defaultLanguage="c#" debug="true" />
<customErrors mode="RemoteOnly" />
<authentication mode="Forms" >
<forms loginUrl="logon.aspx" name="AuthCookie"/>
</authentication>
<authorization>
<allow users="*" />
</authorization>
<trace enabled="false" />
<sessionState
mode="InProc"
cookieless="false"
timeout="20"
/>
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>

</system.web>
<location path="poll.aspx">
<system.web>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="new-poll.aspx">
<system.web>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>


В "защищенном": http://10.0.1.119/polls/test/test.aspx


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</configuration>

vijrel7878

да, все ок

freezer

что, серьезно, в оба?.. а я вот почему-то когда иду по второй сылке (страница в папке test попадаю на login.aspx

vijrel7878

ты ба там хот бы написал secretpage, а то пустое место

freezer

fixed
ну что, еще вопросы какие-нибудь есть?

hov77

а это зачем ?
<location path="poll.aspx">
<location path="new-poll.aspx">

freezer

ну типа смотреть результаты могут все, создавать и голосовать - только авторизованные (что вроде бы разумно). Просто, отдельные настройки для отдельных страниц

vijrel7878

чесно говоря проверять уже лень, меня и мой вариант устраивает. У меня только <location не было указано, в остальном также было. Наверное в нем было дело.
А что сия секция значит?

freezer

вряд ли дело в location (т.к. он там только на 2 страницы действует, вообще, см. msdn а скорее всего в <authentication mode="Forms" /> в "защищенном" конфиге или в том что там нет <allow users="*" />

vijrel7878

"защищенном" конфиге или в том что там нет <allow users="*" />

ага , у меня на самом деле тоже про него первая мысль была. Ладно, вечеком все же проверю
Вот только мне непонятно, как до этого куска выполнение может доходить. Ведь если юзер неавторизован - он отбрасывается deny users = "?", а если авторизован - то проходит. А зачем еще <allow users="*" />?

freezer

на всякий случай. Вообще, по этому поводу в msdn вот что написано:
Remarks
At run time, the authorization module iterates through the <allow> and <deny> tags until it finds the first access rule that fits a particular user. It then grants or denies access to a URL resource depending on whether the first access rule found is an <allow> or a <deny> rule. The default authorization rule in the Machine.config file is <allow users="*"/> so, by default, access is allowed unless configured otherwise.

так что allow all лучше всегда писать: хрен знает что там может быть написано в конфиге сайта, родительских папок или машины
Оставить комментарий
Имя или ник:
Комментарий: