Россия |
Безопасность
Закрепление за браузером постоянной аутентификации форм
До сих пор мы использовали временные cookie-наборы аутентификации для конкретного пользователя, которые действуют только на период сеанса и сразу удаляются браузером после его завершения. Это обеспечивает разумную безопасность. Но иногда может потребоваться закрепить аутентификацию не за пользователем, а за браузером. В этом случае при первой регистрации пользователя можно разрешить ему создать на браузере постоянный cookie-набор, по которому бы узнавался сам браузер.
Постоянные cookie-набор можно создать
- в странице регистрации при первой посещении пользователя установкой второго параметра в значение true (вместо false ) в методе
FormsAuthentication.RedirectFromLoginPage(строка, true);
- в любом другом месте открытого сеанса выполнением метода
FormsAuthentication.SetAuthCookie(строка, true);
- в любом другом месте открытого сеанса выполнением кода
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(строка, true); this.Response.Cookies.Add(authCookie);
Установленный таким способом cookie-набор будет существовать на компьютере пользователя "вечно", если только мы не удалим его методом
FormsAuthentication.SignOut();
Можно также изменить временной статус постоянного cookie-набора на любой странице. Покажем это
-
Добавьте к проекту страницу ModifyPersistentCookieAuth.aspx без файла отделенного кода и заполните ее так
<%@ Page Language="C#" EnableViewState="false" %> <script runat="server"> Label message; protected void Page_Load(object sender, EventArgs e) { // Дескриптор центрирования HtmlGenericControl center = new HtmlGenericControl("center"); form1.Controls.Add(center); // Текстовая метка с заголовком Label label = new Label(); center.Controls.Add(label); label.Text = "<h2>Закрепить аутентификацию за браузером</h2>"; // Кнопки Button createPersistentCookie = new Button(); center.Controls.Add(createPersistentCookie); createPersistentCookie.Text = "Создать бессрочный AuthCookie"; createPersistentCookie.Click += new EventHandler(createPersistentCookie_Click); center.Controls.Add(new HtmlGenericControl("br")); Button createTemporaryCookie = new Button(); center.Controls.Add(createTemporaryCookie); createTemporaryCookie.Text = "Создать срочный AuthCookie"; createTemporaryCookie.Click += new EventHandler(createTemporaryCookie_Click); center.Controls.Add(new HtmlGenericControl("br")); Button deleteCookie = new Button(); center.Controls.Add(deleteCookie); deleteCookie.Text = "Удалить AuthCookie"; deleteCookie.Click += new EventHandler(deleteCookie_Click); center.Controls.Add(new HtmlGenericControl("br")); // Текстовая метка с сообщением message = new Label(); center.Controls.Add(message); message.Text = String.Empty; } void createPersistentCookie_Click(object sender, EventArgs e) { // Создать бессрочный cookie HttpCookie authCookie = FormsAuthentication.GetAuthCookie("xx", true); // Отослать на браузер this.Response.Cookies.Add(authCookie); // Сообщить пользователю message.Text = "Бессрочный AuthCookie создан!"; } void createTemporaryCookie_Click(object sender, EventArgs e) { // Создать бессрочный cookie HttpCookie authCookie = FormsAuthentication.GetAuthCookie("xx", true); // Настроить его как временный сроком на 10 дней authCookie.Expires = DateTime.Now.AddDays(10); // Отослать на браузер this.Response.Cookies.Add(authCookie); // Сообщить пользователю message.Text = "Срочный AuthCookie создан!"; } void deleteCookie_Click(object sender, EventArgs e) { // Удалить cookie-набор регистрации FormsAuthentication.SignOut(); // Сообщить пользователю message.Text = "AuthCookie удален!"; } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> </form> </body> </html>
Интерфейс страницы в режиме выполнения будет таким
При закреплении cookie-набора за браузером при соединении с сайтом страница регистрации пользователю предъявляться не будет, пока не закончится срок действия (если cookie-набор срочный).