Опубликован: 07.05.2010 | Уровень: для всех | Доступ: платный
Лекция 18:

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

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

Добавление в хранилище БД новых пользователей через утилиту WAT

На данном этапе мы рассмотрим интерактивный способ добавления пользователей с применением утилиты WAT. В дальнейшем можно будет создать свои административные страницы для программного добавления пользователей в это хранилище, используя классы Membership. При этом нужно помнить, что хранилище удостоверений будет размещаться на удаленном сервере и поддерживать его мы будем как удаленные пользователи либо через WAT, либо через собственные административные страницы, также хранящиеся на сервере.

Для создания новых аутентифицированных пользователей через утилиту WAT выполните следующее:

  • В панели Solution Explorer щелкните на пиктограмме ASP.NET Configuration, чтобы запустить утилиту WAT
  • Перейдите на вкладку Security и щелкните на гиперссылке Create user

Появится следующий отклик утилиты WAT

Сообщение на странице предлагает ввести имя пользователя, пароль с подтверждением, адрес электронной почты для автоматической отсылки пароля, вопрос и ответ для восстановления пароля на случай его утраты пользователем. При правильном ответе на вопрос пользователь может получить новый автоматически сгенерированный пароль по электронной почте.

В утилите за полем ввода пароля закреплен валидатор для контроля соблюдения требований к строгости пароля. По умолчанию настройка валидаторов пароля такая, что пароль должен иметь длину не менее 7 символов. Причем, как минимум один из символов должен быть неалфавитно-цифровым, например, символ &. Это обеспечивает минимально необходимую строгость пароля. Позднее мы рассмотрим, как в конфигурационном файле можно менять принятые по умолчанию настройки Membership, которые, в том числе, будут влиять и на поведение WAT.

  • Заполните поля страницы для добавления в хранилище одного пользователя со следующими характеристиками
    User Name: admin
    Password: Root&Root
    Confirm Password: Root&Root
    E-mail: Dialog-Service@List.ru
    Security Question: У Вас продается славянский шкаф ?
    Security Answer: Шкаф уже продан, осталась только тумбочка !
    и щелкните на кнопке Create User

После этого действия новый пользователь будет создан в базе данных.

  • В появившемся отклике щелкните на кнопке Continue, чтобы вернутся к интерфейсу добавления следующего пользователя, либо закройте WAT

Страница регистрации

На данном этапе для проверки аутентификации с использованием API Membership и хранилища БД мы воспользуемся страницей регистрации MyLogin.aspx, скопированной нами ранее из предыдущего проекта. Ее нужно только немного модифицировать.

  • Модифицируйте страницу регистрации MyLogin.aspx, чтобы код стал таким
    <%@ Page Language="C#" EnableViewState="false" %>
        
    <script runat="server">
        
        protected void LoginAction_Click(object sender, EventArgs e)
        {
            this.Validate();// Исполнить валидаторы на сервере
            if (!this.IsValid)// Оценить флаг достоверности
                return;// Отправить назад как есть
            
            // Извлечь из базы данных и сравнить с введенным 
            if (Membership.ValidateUser(UsernameText.Text, PasswordText.Text))
            {
                // Создать временный cookie-набор (второй параметр false),
                // записать в него  метку аутентификации и перенаправить
                // на исходную запрошенную страницу или MyDefault.aspx
                // с созданием coockie-набора только на период сеанса
                FormsAuthentication.RedirectFromLoginPage(UsernameText.Text, false);
            }
            else
            {
                HtmlGenericControl message = new HtmlGenericControl();
                message.InnerHtml = "<h2 style='color: Red'>Неверное имя или пароль!</h2>";
                form1.Controls.Add(message);
            }
        }
    </script>
        
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div style="text-align: center">
                <h2>
                    Введите свои имя и пароль</h2>
                <asp:Panel ID="MainPanel" runat="server" BorderColor="Silver" 
                    BorderStyle="Ridge"
                    BorderWidth="2px" Height="90px" Width="412px">
                    <table border="0" cellpadding="5" cellspacing="0" style="width: 100%">
                        <tr>
                            <td>
                                &nbsp;&nbsp;&nbsp;
                            </td>
                            <td align="right" height="43" style="width: 167px">
                                Имя&nbsp;пользователя:</td>
                            <td>
                                &nbsp;<asp:TextBox ID="UsernameText" runat="server" />
                            </td>
                            <td>
                                <asp:RequiredFieldValidator ID="UsernameRequiredValidator" 
                                    runat="server" ControlToValidate="UsernameText"
                                    Display="Dynamic" 
                                    ErrorMessage='Не заполнено поле "Имя пользователя"' 
                                    ToolTip="Пустое поле ввода">*
                                </asp:RequiredFieldValidator>
                                <asp:RegularExpressionValidator ID="UsernameValidator" 
                                    runat="server" ControlToValidate="UsernameText"
                                    Display="Dynamic" ErrorMessage="Неверное имя пользователя" 
                                    ToolTip="Допустимы буквы, цифры, пробелы и подчеркивания"
                                    ValidationExpression="[а-яА-Я\w| ]*">*
                                </asp:RegularExpressionValidator>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                &nbsp;&nbsp;&nbsp;
                            </td>
                            <td align="right" height="43" style="width: 167px">
                                &nbsp;Пароль:</td>
                            <td>
                                &nbsp;<asp:TextBox ID="PasswordText" runat="server" 
                                    TextMode="Password" />
                            </td>
                            <td>
                                <asp:RequiredFieldValidator ID="PwdRequiredValidator" 
                                    runat="server" ControlToValidate="PasswordText"
                                    Display="Dynamic" ErrorMessage='Не заполнено поле "Пароль"' 
                                    ToolTip="Пустое поле ввода">*
                                </asp:RequiredFieldValidator>
                                <asp:RegularExpressionValidator ID="PwdValidator" runat="server" 
                                    ControlToValidate="PasswordText"
                                    Display="Dynamic" ErrorMessage="Неверный пароль" 
                                    ToolTip="Используются недопустимые символы"
                                    ValidationExpression='[а-яА-Я\w| !"$&amp;/()=\-?\*]*'>*
                                </asp:RegularExpressionValidator>
                            </td>
                        </tr>
                    </table>
                    <asp:Button ID="Button1" runat="server" Text="Отправить" 
                        OnClick="LoginAction_Click" />
                </asp:Panel>
                <asp:Label ID="lblResult" runat="server" />
            </div>
            <asp:ValidationSummary ID="ValidationSummary1" runat="server" />
        </form>
    </body>
    </html>
  • Запустите приложение с любой страницы и введите учетную запись, сохраненную нами ранее в базе данных
    User Name: admin
    Password: Root&Root
  • С помощью утилиты WAT добавьте в хранилище еще несколько пользователей и убедитесь, что аутентификация на основе Membership и хранилища удостоверений в БД работает

При добавлении новых пользователей следует иметь ввиду, что имя пользователя сохраняется в поле UserName реляционной таблицы aspnet_Users и является основой для формирования поля UserId как первичного ключа. Поэтому все пользователи должны иметь уникальные имена.

  • В панели Server Explorer установите соединение с базой данных ASPNETDB
  • Для таблиц aspnet_Users и aspnet_Membership выполните команду Show Table Data контекстного меню

После таких действий откроются таблицы aspnet_Users и aspnet_Membership, в которых можно найти информацию о созданных пользователях. Для того, чтобы увидеть структуру таблиц, следует выполнить для них команду Open Table Definition контекстного меню.

Программное управление аутентификацией с использованием API Membership

Интерфейс API Membership включает в себя следующие классы пространства имен System.Web.Security:

  1. Membership - статический класс, имеющий ряд полезных методов управления пользователями
  2. MembershipCreateUserException - исключение, генерируемое ошибкой создания пользователя (например, с уже существующим именем)
  3. MembershipPasswordException - исключение при невозможности извлечения пароля
  4. MembershipUser - объект этого класса содержит всю информацию о пользователе и возвращается методом Membership.GetUser()
  5. MembershipUserCollection - коллекция пользователей, извлекаемая методом Membership.GetAllUsers()
  6. MembershipProvider - базовый класс для поставщиков данных
  7. MembershipProviderCollection - коллекция доступных для приложения поставщиков на данной машине
  8. SqlMembershipProvider - поставщик для работы с базами данных SQL Server
  9. ActiveDirectoryMembershipProvider - поставщик для работы со службой Active Directory
  10. ActiveDirectoryMembershipUser - класс поддержки пользователя, расширенный для работы со службой Active Directory

Используя API Membership, можно программно решать, например, следующие задачи:

  • Создание, редактирование и удаление пользователей
  • Извлечение списков пользователей со всей подробной информацией, занесенной при создании
< Лекция 17 || Лекция 18: 123456789
Илья Онучин
Илья Онучин
Россия
Igor Chelyadinski
Igor Chelyadinski
Беларусь, Минск, №54, 2013