Здравствуйте, ne3nayka, Вы писали:
N>Здравствуйте, Диспетчер, Вы писали:
>>>При таких настройках попадаю на любую страницу без прохождения авторизации на формах.
N>>>Подскажите плиз, реально сделать авторизацию через эти страничку приветствия и форму авторизации не меняя внутренних страниц сайта?
Д>>К примеру, как это сделано у меня:
Д>>Во-первых:
Д>>Д>><authorization>
Д>> <deny users="?"/>
Д>></authorization>
Д>>
Д>>Во-вторых, для доступных всем страниц:
Д>>Д>><location path="login.aspx">
Д>> <system.web>
Д>> <authorization>
Д>> <allow users="*"/>
Д>> </authorization>
Д>> </system.web>
Д>> </location>
Д>><location path="Приветствие.aspx">
Д>> <system.web>
Д>> <authorization>
Д>> <allow users="*"/>
Д>> </authorization>
Д>> </system.web>
Д>> </location>
Д>>
Д>>В-третьих, для остальных страниц (для каждой):
Д>>Д>><location path="Page1.aspx">
Д>> <system.web>
Д>> <authorization>
Д>> <allow roles="Роль1, Роль2"/>
Д>> <deny users="*"/>
Д>> </authorization>
Д>> </system.web>
Д>> </location>
Д>><location path="Page2.aspx">
Д>> <system.web>
Д>> <authorization>
Д>> <allow roles="Роль2"/>
Д>> <deny users="*"/>
Д>> </authorization>
Д>> </system.web>
Д>> </location>
Д>>
Д>>и т.д. и т.п.
N>Подход в целом мне нравится
Но в таком случае придется для КАЖДОЙ страницы отдельно прописывать доступ,
N>роли, что не есть гут. У меня страниц больше сотни. Это не проще чем Кстати, под ролью в данном случае имеется в виду ASPNET-роль(SqlProvider, Администраторы и т.д.)?
N>У меня то задача простая: своих пускать, чужих не пускать)
N>В предложенном варианте не задействуется потенциал <authentication mode="Forms">. Может именно в нем — недостающее звено?
N>Еще была мысль проверять в Global.asax заполнение некого параметра Сессии. Но в обработчике begin_request сессия по каким то причинам недоступна,
N>а session_start насколько понимаю сработает как раз на общедоступных страницах, потому пользы не принесет...Может какой-то нюанс упустил из виду,
N>который поможет через него реализовать все таки?
Да, у меня для каждой страницы прописан доступ. И у меня тоже их больше сотни. Но делается это один раз.
Можно прописать доступ для целой папки.
Под ролью подразумевается любая строка, которая потом прописывается в Authorization Ticket при авторизации:
<authentication mode="Forms">
<forms loginUrl="Auth.ashx" name="InternalAuth" timeout="60" path="/" slidingExpiration="true">
</forms>
</authentication>
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket([версия], [имя], [время создания], [срок годности], [хранить ли постоянно], [набор прав]);
HttpContext.Current.Response.Cookies.Set(new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName - name из <forms>, System.Web.Security.FormsAuthentication.Encrypt(authTicket)));
В предложенном варианте как раз задействуется потенциал <authentication mode="Forms">. Так у меня реализовано.