Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 18:

Безопасность

< Лекция 17 || Лекция 18: 123456789

Закрепление за браузером постоянной аутентификации форм

До сих пор мы использовали временные 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-набор срочный).


< Лекция 17 || Лекция 18: 123456789