Проверка подлинности пользователей с помощью проверки подлинности на основе форм (VB)

от Корпорации Майкрософт

Узнайте, как использовать атрибут [Авторизовать] для защиты паролем определенных страниц в приложении MVC. Вы узнаете, как использовать средство администрирования веб-сайтов для создания пользователей и ролей и управления ими. Вы также узнаете, как настроить место хранения сведений об учетной записи пользователя и роли.

Цель этого руководства — объяснить, как использовать проверку подлинности с помощью форм для защиты представлений паролем в приложениях ASP.NET MVC. Вы узнаете, как использовать средство администрирования веб-сайта для создания пользователей и ролей. Вы также узнаете, как предотвратить вызов действий контроллера неавторизованными пользователями. Наконец, вы узнаете, как настроить место хранения имен пользователей и паролей.

Использование средства администрирования веб-сайта

Прежде чем делать что-либо еще, мы должны начать с создания некоторых пользователей и ролей. Самый простой способ создать новых пользователей и роли — воспользоваться преимуществами средства администрирования веб-сайтов Visual Studio 2008. Это средство можно запустить, выбрав пункт меню Проект, ASP.NET Конфигурация. Кроме того, вы можете запустить средство администрирования веб-сайта, щелкнув значок (несколько страшно), чтобы молоток ударил мир, который отображается в верхней части окна Обозреватель решений (см. рис. 1).

Рис. 1. Запуск средства администрирования веб-сайта

clip_image002[4]

В средстве администрирования веб-сайтов можно создать новых пользователей и роли, выбрав вкладку Безопасность. Щелкните ссылку Создать пользователя , чтобы создать нового пользователя с именем Stephen (см. рис. 2). Предоставьте пользователю Stephen любой пароль (например, секрет).

Рис. 2. Создание нового пользователя

clip_image004[4]

Вы создаете новые роли, сначала включив роли и определив одну или несколько ролей. Включите роли, щелкнув ссылку Включить роли . Затем создайте роль с именем Администраторы , щелкнув ссылку Создать роли или Управление ролями (см. рис. 3).

Рис. 3. Создание новой роли

clip_image006[4]

Наконец, создайте нового пользователя sally и свяжите Салли с ролью Администраторы, щелкнув ссылку Создать пользователя и выбрав Администраторы при создании Салли (см. рис. 4).

Рис. 4. Добавление пользователя в роль

clip_image008[4]

Когда все сказано и сделано, у вас должно быть два новых пользователя по имени Стивен и Салли. У вас также должна быть новая роль с именем Администраторы. Салли является членом роли администраторов, а Стивен — нет.

Требуется авторизация

Вы можете потребовать, чтобы пользователь прошел проверку подлинности перед вызовом действия контроллера, добавив в действие атрибут [Авторизовать]. Атрибут [Авторизовать] можно применить к отдельному действию контроллера или ко всему классу контроллера.

Например, контроллер в листинге 1 предоставляет действие с именем CompanySecrets(). Так как это действие декорировано атрибутом [Authorize], это действие не может быть вызвано, если пользователь не прошел проверку подлинности.

Листинг 1. Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

    <Authorize()> _
    Function CompanySecrets()
        Return View()
    End Function

End Class

Если вы вызываете действие CompanySecrets(), введя URL-адрес /Home/CompanySecrets в адресной строке браузера и вы не являетесь пользователем, прошедшим проверку подлинности, вы будете автоматически перенаправлены в представление входа (см. рис. 5).

Рис. 5. Представление "Вход"

clip_image010[4]

В представлении Входа можно ввести имя пользователя и пароль. Если вы не являетесь зарегистрированным пользователем, щелкните ссылку регистрации , чтобы перейти к представлению Регистрация (см. рис. 6). Для создания учетной записи пользователя можно использовать представление Регистрация.

Рис. 6. Представление "Регистрация"

clip_image012

После успешного входа вы увидите представление CompanySecrets (см. рис. 7). По умолчанию вы будете продолжать выполнять вход, пока не закроете окно браузера.

Рис. 7. Представление CompanySecrets

clip_image014

Авторизация по имени пользователя или роли пользователя

Атрибут [Авторизовать] можно использовать для ограничения доступа к действию контроллера определенным набором пользователей или определенным набором ролей пользователей. Например, измененный контроллер Home в листинге 2 содержит два новых действия с именами StephenSecrets() и AdministratorSecrets().

Листинг 2. Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

    <Authorize()> _
    Function CompanySecrets()
        Return View()
    End Function


    <Authorize(Users:="Stephen")> _
    Function StephenSecrets()
        Return View()
    End Function

    <Authorize(Roles:="Administrators")> _
    Function AdministratorSecrets()
        Return View()
    End Function

End Class

Вызывать действие StephenSecrets() может только пользователь с именем пользователя Stephen. Все остальные пользователи перенаправляются в представление Входа. Свойство Users принимает разделенный запятыми список имен учетных записей пользователей.

Вызывать действие AdministratorSecrets() могут только пользователи с ролью "Администраторы". Например, так как Салли является членом группы "Администраторы", она может вызвать действие AdministratorSecrets(). Все остальные пользователи перенаправляются в представление Входа. Свойство Roles принимает разделенный запятыми список имен ролей.

Настройка проверки подлинности

На этом этапе вам может быть интересно, где хранятся сведения об учетной записи пользователя и роли. По умолчанию эти сведения хранятся в базе данных SQL Express (RANU) с именем ASPNETDB.mdf, расположенной в папке App_Data приложения MVC. Эта база данных создается платформой ASP.NET автоматически при запуске использования членства.

Чтобы увидеть базу данных ASPNETDB.mdf в окне Обозреватель решений, сначала необходимо выбрать пункт Меню Проект, Показать все файлы.

При разработке приложения можно использовать базу данных SQL Express по умолчанию. Однако, скорее всего, вы не захотите использовать базу данных ASPNETDB.mdf по умолчанию для рабочего приложения. В этом случае можно изменить место хранения сведений об учетной записи пользователя, выполнив следующие два шага.

  1. Добавление объектов базы данных служб приложений в рабочую базу данных — измените строку подключения приложения, чтобы она указывала на рабочую базу данных.

Первым шагом является добавление всех необходимых объектов базы данных (таблиц и хранимых процедур) в рабочую базу данных. Самый простой способ добавить эти объекты в новую базу данных — воспользоваться преимуществами мастера настройки ASP.NET SQL Server (см. рис. 8). Чтобы запустить это средство, откройте командную строку Visual Studio 2008 из группы программ Microsoft Visual Studio 2008 и выполните следующую команду в командной строке:

aspnet_regsql

Рис. 8. Мастер настройки ASP.NET SQL Server

clip_image016

Мастер установки ASP.NET SQL Server позволяет выбрать SQL Server базу данных в сети и установить все объекты базы данных, необходимые для служб приложений ASP.NET. Сервер базы данных не обязательно находиться на локальном компьютере.

Примечание

Если вы не хотите использовать мастер установки ASP.NET SQL Server, скрипты SQL для добавления объектов базы данных служб приложений можно найти в следующей папке:

C:\Windows\Microsoft.NET\Framework\v2.0.50727

После создания необходимых объектов базы данных необходимо изменить подключение к базе данных, используемое приложением MVC. Измените строку подключения ApplicationServices в файле веб-конфигурации (web.config), чтобы она указывала на рабочую базу данных. Например, измененное подключение в листинге 3 указывает на базу данных с именем MyProductionDB (исходная строка подключения ApplicationServices была закомментирована).

Листинг 3. Web.config

<connectionStrings>

<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->

<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />

</connectionStrings>

Настройка разрешений базы данных

Если для подключения к базе данных используется встроенная безопасность, необходимо добавить правильную учетную запись пользователя Windows в качестве имени входа в базу данных. Правильная учетная запись зависит от того, используете ли вы сервер разработки ASP.NET или службы IIS в качестве веб-сервера. Правильная учетная запись пользователя также зависит от вашей операционной системы.

Если вы используете сервер разработки ASP.NET (веб-сервер по умолчанию, используемый Visual Studio), приложение выполняется в контексте учетной записи пользователя Windows. В этом случае необходимо добавить учетную запись пользователя Windows в качестве имени входа сервера базы данных.

Кроме того, если вы используете службы IIS, необходимо добавить либо учетную запись ASPNET, либо учетную запись NT AUTHORITY/NETWORK SERVICE в качестве имени входа сервера базы данных. Если вы используете Windows XP, добавьте учетную запись ASPNET в качестве имени входа в базу данных. Если вы используете более новую операционную систему, например Windows Vista или Windows Server 2008, добавьте учетную запись NT AUTHORITY/NETWORK SERVICE в качестве имени входа базы данных.

Вы можете добавить новую учетную запись пользователя в базу данных с помощью microsoft SQL Server Management Studio (см. рис. 9).

Рис. 9. Создание нового имени входа Microsoft SQL Server

clip_image018

После создания необходимого имени входа необходимо сопоставить имя входа с пользователем базы данных с соответствующими ролями базы данных. Дважды щелкните имя входа и выберите вкладку Сопоставление пользователей. Выберите одну или несколько ролей базы данных служб приложений. Например, для проверки подлинности пользователей необходимо включить роль базы данных aspnet_Membership_BasicAccess. Чтобы создать новых пользователей, необходимо включить роль базы данных aspnet_Membership_FullAccess (см. рис. 10).

Рис. 10. Добавление ролей базы данных служб приложений

clip_image020

Итоги

В этом руководстве вы узнали, как использовать проверку подлинности с помощью форм при создании приложения MVC ASP.NET. Во-первых, вы узнали, как создавать новых пользователей и роли, используя средства администрирования веб-сайтов. Затем вы узнали, как использовать атрибут [Авторизовать], чтобы предотвратить вызов действий контроллера неавторизованными пользователями. Наконец, вы узнали, как настроить приложение MVC для хранения сведений о пользователях и роли в рабочей базе данных.