День добрый! Занимаюсь корпоративным сайтом, возникла проблема как реализовать авторизацию пользователей.
Сайт должен быть доступен только корпоративным пользователям. В связи с этим, у него есть 2 доступные всем странички:
1.Приветствия и 2.Авторизации. Все остальные странички должны быть для неавторизованных пользователей недоступны.
Желаемое решение — настройка Web.Confog правильным образом, без модификации самих внутренних страниц.
Возможно, часть логики прописать в Global.asax.
Сейчас настроил Web.Config следующим образом
<authentication mode="Forms">
<forms loginUrl="login.aspx" timeout="1" name=".FOOAUTH" defaultUrl="Welcome.aspx" path="/" cookieless="UseCookies" />
</authentication>
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>
<authorization>
<allow users="*" />
</authorization>
При таких настройках попадаю на любую страницу без прохождения авторизации на формах.
Подскажите плиз, реально сделать авторизацию через эти страничку приветствия и форму авторизации не меняя внутренних страниц сайта?
Здравствуйте, ne3nayka, Вы писали:
N>День добрый! Занимаюсь корпоративным сайтом, возникла проблема как реализовать авторизацию пользователей. N>Сайт должен быть доступен только корпоративным пользователям. В связи с этим, у него есть 2 доступные всем странички: N>1.Приветствия и 2.Авторизации. Все остальные странички должны быть для неавторизованных пользователей недоступны.
N>Желаемое решение — настройка Web.Confog правильным образом, без модификации самих внутренних страниц. N>Возможно, часть логики прописать в Global.asax.
N>Сейчас настроил Web.Config следующим образом N> <authentication mode="Forms"> N> <forms loginUrl="login.aspx" timeout="1" name=".FOOAUTH" defaultUrl="Welcome.aspx" path="/" cookieless="UseCookies" /> N> </authentication> N> <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/> N> <authorization> N> <allow users="*" /> N> </authorization>
N>При таких настройках попадаю на любую страницу без прохождения авторизации на формах.
N>Подскажите плиз, реально сделать авторизацию через эти страничку приветствия и форму авторизации не меняя внутренних страниц сайта?
Здравствуйте, Диспетчер, Вы писали:
>>При таких настройках попадаю на любую страницу без прохождения авторизации на формах.
N>>Подскажите плиз, реально сделать авторизацию через эти страничку приветствия и форму авторизации не меняя внутренних страниц сайта?
Д>К примеру, как это сделано у меня:
Д>Во-первых:
Д>
Подход в целом мне нравится Но в таком случае придется для КАЖДОЙ страницы отдельно прописывать доступ,
роли, что не есть гут. У меня страниц больше сотни. Это не проще чем Кстати, под ролью в данном случае имеется в виду ASPNET-роль(SqlProvider, Администраторы и т.д.)?
У меня то задача простая: своих пускать, чужих не пускать)
В предложенном варианте не задействуется потенциал <authentication mode="Forms">. Может именно в нем — недостающее звено?
Еще была мысль проверять в Global.asax заполнение некого параметра Сессии. Но в обработчике begin_request сессия по каким то причинам недоступна,
а session_start насколько понимаю сработает как раз на общедоступных страницах, потому пользы не принесет...Может какой-то нюанс упустил из виду,
который поможет через него реализовать все таки?
N>Подход в целом мне нравится Но в таком случае придется для КАЖДОЙ страницы отдельно прописывать доступ, N>роли, что не есть гут. У меня страниц больше сотни. Это не проще чем Кстати, под ролью в данном случае имеется в виду ASPNET-роль(SqlProvider, Администраторы и т.д.)? N>У меня то задача простая: своих пускать, чужих не пускать) N>В предложенном варианте не задействуется потенциал <authentication mode="Forms">. Может именно в нем — недостающее звено?
У ииса с его веб.конфигами есть волшебная особенность. если не указывать страницу то его действие распространяется на все вложенные папки.
Таким образом можно настроить иис примерно так:
и те самые 2 страницы, на которые разрешен доступ без логина
в папке MainSite будет расположен основной сайт со всеми его страничками и веб конфигом из 9 строк:
Что не позволит ломится в эту папку кому попало.
N>Еще была мысль проверять в Global.asax заполнение некого параметра Сессии. Но в обработчике begin_request сессия по каким то причинам недоступна, N>а session_start насколько понимаю сработает как раз на общедоступных страницах, потому пользы не принесет...Может какой-то нюанс упустил из виду, N>который поможет через него реализовать все таки?
в этом случае с глобал асаксом делать ничего не надо. В 2008 студии есть контрол login, который практически все делает сам, от вас потребуется написать обработчик onLoggedIn (ну или как-то так, он там практически один), в котором возвращать true или false — подходят логин с паролем или нет.
Если возникнет желание делать все самому, то предлагаю покурить в сторону FormsAuthentication класса.
Здравствуйте, ne3nayka, Вы писали:
N>Здравствуйте, Диспетчер, Вы писали:
>>>При таких настройках попадаю на любую страницу без прохождения авторизации на формах.
N>>>Подскажите плиз, реально сделать авторизацию через эти страничку приветствия и форму авторизации не меняя внутренних страниц сайта?
Д>>К примеру, как это сделано у меня:
Д>>Во-первых:
Д>>
Д>>и т.д. и т.п.
N>Подход в целом мне нравится Но в таком случае придется для КАЖДОЙ страницы отдельно прописывать доступ, N>роли, что не есть гут. У меня страниц больше сотни. Это не проще чем Кстати, под ролью в данном случае имеется в виду ASPNET-роль(SqlProvider, Администраторы и т.д.)? N>У меня то задача простая: своих пускать, чужих не пускать) N>В предложенном варианте не задействуется потенциал <authentication mode="Forms">. Может именно в нем — недостающее звено?
N>Еще была мысль проверять в Global.asax заполнение некого параметра Сессии. Но в обработчике begin_request сессия по каким то причинам недоступна, N>а session_start насколько понимаю сработает как раз на общедоступных страницах, потому пользы не принесет...Может какой-то нюанс упустил из виду, N>который поможет через него реализовать все таки?
Да, у меня для каждой страницы прописан доступ. И у меня тоже их больше сотни. Но делается это один раз.
Можно прописать доступ для целой папки.
Под ролью подразумевается любая строка, которая потом прописывается в Authorization Ticket при авторизации:
Здравствуйте, ApmeM, Вы писали: AM>Кстати да, если абсолютность путей не позволяет перенести файлики во внутреннюю папку, то можно сделать примерно как описал ne3nayka AM>
AM>Раз у тебя нет ролей, то и описывать их не надо. Просто написал что никому никуда нельзя кроме этих 2х страниц, и все.
Решение вполне удобное! Только есть проблема: при такой настройке во внутренние страницы не попадаю. То есть на приветствие и авторизацию — ок.
А во внутренние страницы уже после успешной авторизации получаю Error message 401.2.: Unauthorized: Logon failed due to server configuration.
Здравствуйте, ne3nayka, Вы писали: N>Решение вполне удобное! Только есть проблема: при такой настройке во внутренние страницы не попадаю. То есть на приветствие и авторизацию — ок. N>А во внутренние страницы уже после успешной авторизации получаю Error message 401.2.: Unauthorized: Logon failed due to server configuration.
N>Настройки веб.конфига следующие: N>
Во первых с авторизацией все-таки что-то не то, слово "Unauthorized" как-бы намекает, что логина для системы в общем то не было, то-есть скорее всего login контрол, FormsAuthentication класс или страница микрософта выкурены не полностью
Во вторых я тут не вижу указания
[ccode]
<authentication mode="Forms">
<forms cookieless="UseCookies" loginUrl="Login/Login.aspx" />
</authentication>
[/ccode.
о которых я говорил первым постом. Они все-равно необходимы, мой второй камент был как дополнение к первому. В связи с этим падает сообщение с тем самым словом "Unauthorized", хотя при правильной настройке сайта пользователя должно редиректить на login.aspx, о котором сказано в конфиге.