Поделиться через


Практическое руководство. Реализация простой проверки подлинности с помощью форм

Обновлен: Ноябрь 2007

В примере, изложенном в данном разделе, показана простая реализация проверки подлинности с помощью форм ASP.NET. Это сделано для того, чтобы показать принципы использования проверки подлинности с помощью форм для входа пользователей в приложение ASP.NET.

xdt4thhy.alert_note(ru-ru,VS.90).gifПримечание.

Удобным способом проверки подлинности с помощью форм является использование членства ASP.NET и элементов управления входа ASP.NET. Членство ASP.NET предоставляет способ хранения и управления сведениями о пользователе, а также содержит методы проверки подлинности пользователей. Элементы управления входом ASP.NET работают с членством ASP.NET и инкапсулируют логику для запроса учетных данных пользователей, проверяют подлинность пользователя, восстанавливают или изменяют пароли и т. д. Фактически членство ASP.NET и элементы управления входом ASP.NET обеспечивают уровень абстракции проверки подлинности с помощью форм и заменяют большую часть работы или всю работу, которая обычно выполняется, чтобы использовать проверку подлинности с помощью форм. Дополнительные сведения см. в разделах Управление пользователями путем объединения их в группы и Общие сведения об элементах управления входом ASP.NET.

Например, в сценарии пользователи запрашивают защищенный ресурс, а именно страницу Default.aspx. Только один пользователь получает доступ к защищенному ресурсу: jchen@contoso.com, с паролем «37Yj*99P». Имя и пароль пользователя жестко заданы в файле Logon.aspx. Для примера требуется наличие трех файлов: файла Web.config, страниц Logon.aspx и Default.aspx. Файлы постоянно хранятся в корневой папке приложения.

Настройка приложения для проверки подлинности с помощью форм

  1. Если в корне приложения имеется файл Web.config, откройте его.

  2. Если в корневой папке приложения отсутствует файл Web.config, то создайте текстовый файл под названием Web.config и добавьте в него следующие элементы:

    <?xml version="1.0"?>
    <configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0">
        <system.web>
    
        </system.web>
    </configuration>
    
  3. Создайте в элементе system.web элемент authentication и присвойте его атрибуту mode значение Forms, как показано в следующем примере:

    <system.web>
      <authentication mode="Forms">  </authentication>
    </system.web>
    
  4. В элементе authentication создайте элемент forms и задайте следующие атрибуты:

    • Атрибут loginUrl устанавливается в значение «Logon.aspx». URL-адрес Logon.aspx используется для переадресации в случае, если ASP.NET не находит в запросе файл Cookie проверки подлинности.

    • Атрибут name устанавливается в значение «.ASPXFORMSAUTH». Задает суффикс для имени файла Cookie, содержащего билет проверки подлинности.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">    </forms>
      </authentication>
    </system.web>
    
  5. В элементе system.web создайте элемент authorization:

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>  </authorization>
    </system.web>
    
  6. В элементе authorization создайте элемент deny и установите значение его атрибута users равным «?». Атрибут указывает, что для пользователей, не прошедших проверку (представленных «?»), запрещен доступ к ресурсам данного приложения.

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="logon.aspx" name=".ASPXFORMSAUTH">
        </forms>
      </authentication>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
    
  7. Сохраните изменения и закройте файл Web.config.

Создание страницы входа

При запросе страницы из веб-узла пользователи, не прошедшие проверку подлинности, перенаправляются на страницу под названием Logon.aspx. Имя данного файла было указано ранее в файле Web.config.

На странице Logon.aspx собираются учетные данные пользователей (адрес электронной почты и пароль) и производится проверка их подлинности. Если пользователь успешно прошел проверку подлинности, то со страницы входа он перенаправляется на первоначально запрошенную страницу. В этом примере допустимые учетные записи жестко заданы в коде страницы.

xdt4thhy.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

В данном примере присутствует текстовое поле, куда вводятся пользовательские данные, которые представляют потенциальную угрозу безопасности. По умолчанию на веб-страницах ASP.NET проверяются введенные пользователем данные на наличие сценариев и HTML-элементов. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.

Создание страницы входа

  1. Создайте страницу ASP.NET под названием Logon.aspx в корневой папке приложения.

  2. Скопируйте в нее следующие исправления и код:

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Web.Security" %>
    
    <script runat="server">
      Sub Logon_Click(ByVal sender As Object, ByVal e As EventArgs)
        If ((UserEmail.Text = "jchen@contoso.com") And _
                (UserPass.Text = "37Yj*99Ps")) Then
          FormsAuthentication.RedirectFromLoginPage _
               (UserEmail.Text, Persist.Checked)
        Else
          Msg.Text = "Invalid credentials. Please try again."
        End If
      End Sub
    </script>
    
    <html>
    <head id="Head1" runat="server">
      <title>Forms Authentication - Login</title>
    </head>
    <body>
      <form id="form1" runat="server">
        <h3>
          Logon Page</h3>
        <table>
          <tr>
            <td>
              E-mail address:</td>
            <td>
              <asp:TextBox ID="UserEmail" runat="server" /></td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
                ControlToValidate="UserEmail"
                Display="Dynamic" 
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Password:</td>
            <td>
              <asp:TextBox ID="UserPass" TextMode="Password" 
                runat="server" />
            </td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
                ControlToValidate="UserPass"
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Remember me?</td>
            <td>
              <asp:CheckBox ID="Persist" runat="server" /></td>
          </tr>
        </table>
        <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"  
           runat="server" />
        <p>
          <asp:Label ID="Msg" ForeColor="red" runat="server" />
        </p>
      </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Web.Security" %>
    
    <script runat="server">
      void Logon_Click(object sender, EventArgs e)
      {
        if ((UserEmail.Text == "jchen@contoso.com") && 
                (UserPass.Text == "37Yj*99Ps"))
          {
              FormsAuthentication.RedirectFromLoginPage 
                 (UserEmail.Text, Persist.Checked);
          }
          else
          {
              Msg.Text = "Invalid credentials. Please try again.";
          }
      }
    </script>
    <html>
    <head id="Head1" runat="server">
      <title>Forms Authentication - Login</title>
    </head>
    <body>
      <form id="form1" runat="server">
        <h3>
          Logon Page</h3>
        <table>
          <tr>
            <td>
              E-mail address:</td>
            <td>
              <asp:TextBox ID="UserEmail" runat="server" /></td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
                ControlToValidate="UserEmail"
                Display="Dynamic" 
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Password:</td>
            <td>
              <asp:TextBox ID="UserPass" TextMode="Password" 
                 runat="server" />
            </td>
            <td>
              <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
                ControlToValidate="UserPass"
                ErrorMessage="Cannot be empty." 
                runat="server" />
            </td>
          </tr>
          <tr>
            <td>
              Remember me?</td>
            <td>
              <asp:CheckBox ID="Persist" runat="server" /></td>
          </tr>
        </table>
        <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On" 
           runat="server" />
        <p>
          <asp:Label ID="Msg" ForeColor="red" runat="server" />
        </p>
      </form>
    </body>
    </html>
    

    На странице содержатся серверные элементы управления ASP.NET, с помощью которых производится сбор сведений о пользователе, и флажок, который пользователи могут установить для того, чтобы сохранить свои учетные данные для входа. В обработчике кнопки Log OnClick содержится код, с помощью которого осуществляется проверка адреса электронной почты и пароля пользователя на соответствие жестко заданным значениям. (Надежный пароль — это пароль, состоящий из различных неалфавитных символов, длина которого составляет не менее восьми символов.) Если учетные записи пользователя верны, код вызывает метод класса FormsAuthentication под названием RedirectFromLoginPage, передающий имя пользователя и логическое значение (производное от флажка), показывающий, сохранен ли билет проверки подлинности в качестве файла Cookie. Посредством метода пользователь перенаправляется на первоначально запрошенную страницу. Если учетные записи пользователя не совпадают, то отображается сообщение об ошибке. Обратите внимание, что в страницу импортируется пространство имен System.Web.Security, содержащее класс FormsAuthentication.

Создание страницы по умолчанию

Например, создайте страницу ASP.NET в корневой папке приложения. Поскольку в файле конфигурации указано, что доступ к ресурсам приложения ASP.NET (которые включают ASPX-файлы, но не включает такие статические файлы, как HTML-файлы или файлы мультимедиа, например изображения, музыку и т. п.) запрещен для всех пользователей, не прошедших проверку, то когда пользователь запрашивает страницу, производится проверка подлинности учетных записей пользователя с помощью форм и, в случае необходимости, пользователь перенаправляется на страницу входа. Кроме того, с помощью созданной страницы пользователи могут выполнять выход, после которого очищается содержимое сохраненного билета проверки подлинности (файл Cookie).

Создание страницы по умолчанию

  1. Создайте страницу ASP.NET под названием Default.aspx в корневой папке приложения.

  2. Скопируйте в нее следующие исправления и код:

    <%@ Page Language="VB" %>
    <html>
    <head>
      <title>Forms Authentication - Default Page</title>
    </head>
    
    <script runat="server">
      Sub Page_Load(ByVal Src As Object, ByVal e As EventArgs)
        Welcome.Text = "Hello, " & Context.User.Identity.Name
      End Sub
    
      Sub Signout_Click(ByVal sender As Object, ByVal e As EventArgs)
        FormsAuthentication.SignOut()
        Response.Redirect("Logon.aspx")
      End Sub
    </script>
    
    <body>
      <h3>
        Using Forms Authentication</h3>
      <asp:Label ID="Welcome" runat="server" />
      <form id="Form1" runat="server">
        <asp:Button ID="Submit1" OnClick="Signout_Click" 
           Text="Sign Out" runat="server" /><p>
      </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <html>
    <head>
      <title>Forms Authentication - Default Page</title>
    </head>
    
    <script runat="server">
      void Page_Load(object sender, EventArgs e)
      {
        Welcome.Text = "Hello, " + Context.User.Identity.Name;
      }
    
      void Signout_Click(object sender, EventArgs e)
      {
        FormsAuthentication.SignOut();
        Response.Redirect("Logon.aspx");
      }
    </script>
    
    <body>
      <h3>
        Using Forms Authentication</h3>
      <asp:Label ID="Welcome" runat="server" />
      <form id="Form1" runat="server">
        <asp:Button ID="Submit1" OnClick="Signout_Click" 
           Text="Sign Out" runat="server" /><p>
      </form>
    </body>
    </html>
    

    На странице отображается подтвержденная идентификация пользователя, заданная классом FormsAuthentication и доступная на странице ASP.NET в качестве свойства Context.User.Identity.Name. Обработчик кнопки Sign Out под названием Click содержит код, вызывающий метод SignOut для очистки идентификации пользователя и удаления билета проверки подлинности (файла Cookie). Затем производится перенаправление пользователя на страницу входа.

См. также

Основные понятия

Основные методы обеспечения безопасности веб-приложений

Ссылки

Общие сведения об элементах управления входом ASP.NET

Другие ресурсы

Безопасность веб-приложений ASP.NET

Управление пользователями путем объединения их в группы