Re[3]: авторизация через Forms
От: Диспетчер Россия  
Дата: 23.03.10 06:43
Оценка:
Здравствуйте, 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">. Так у меня реализовано.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.