Реализация пользовательского поставщика хранилища для поставщика хранилища MySQL в ASP.NET
Ракель Соарес де Альмейда, Сухас Джоши, Том ФицМаккен
ASP.NET Identity — это расширяемая система, которая позволяет создать собственный поставщик хранилища и подключить его к приложению без повторной работы приложения. В этом разделе описывается создание поставщика хранилища MySQL для ASP.NET Identity. Общие сведения о создании настраиваемых поставщиков хранилища см. в статье Общие сведения о настраиваемых поставщиках хранилища для ASP.NET identity.
Для работы с этим руководством необходимо иметь Visual Studio 2013 с обновлением 2.
В этом руководстве описаны указанные ниже действия.
- Узнайте, как создать экземпляр базы данных MySQL в Azure.
- Узнайте, как использовать клиентское средство MySQL (MySQL Workbench) для создания таблиц и управления удаленной базой данных в Azure.
- Узнайте, как заменить реализацию хранилища удостоверений по умолчанию ASP.NET пользовательской реализацией в проекте приложения MVC.
Первоначально это руководство было написано Ракель Соарес Де Алмейда и Рик Андерсон ( @RickAndMSFT ). Пример проекта был обновлен для Identity 2.0 suhas Joshi. Раздел был обновлен для Identity 2.0 Томом ФитцМакеном.
Скачивание завершенного проекта
В конце этого руководства вы получите проект приложения MVC с ASP.NET Identity, работающим с базой данных MySQL, размещенной в Azure.
Готовый поставщик хранилища MySQL можно скачать на странице AspNet.Identity.MySQL (GitHub).
Действия, которые вы будете выполнять
Изучив данный учебник, вы научитесь:
- Создание базы данных MySQL в Azure
- Создание таблиц удостоверений ASP.NET в MySQL
- Создание приложения MVC и настройка его для использования поставщика MySQL
- Запуск приложения
В этом разделе не рассматривается архитектура ASP.NET Identity и решения, которые необходимо принять при реализации поставщика хранилища клиента. Эти сведения см. в статье Общие сведения о настраиваемых поставщиках хранилища для ASP.NET Identity.
Ознакомьтесь с классами поставщиков хранилища MySQL
Прежде чем перейти к шагам по созданию поставщика хранилища MySQL, давайте рассмотрим классы, составляющие поставщика хранилища. Вам потребуются классы, управляющие операциями базы данных, и классы, вызываемые из приложения для управления пользователями и ролями.
Классы хранения
- IdentityUser — содержит свойства для пользователя.
- UserStore — содержит операции по добавлению, обновлению или получению пользователей.
- IdentityRole — содержит свойства для ролей.
- RoleStore — содержит операции по добавлению, удалению, обновлению и получению ролей.
Классы уровня доступа к данным
В этом примере классы уровня доступа к данным содержат инструкции SQL для работы с таблицами; Однако в коде может потребоваться использовать объектно-реляционное сопоставление (ORM), например Entity Framework или NHibernate. В частности, приложение может испытывать низкую производительность без ORM, который включает отложенную загрузку и кэширование объектов.
- MySQLDatabase — содержит подключение к базе данных MySQL и методы для выполнения операций с базой данных. Экземпляры UserStore и RoleStore создаются с экземпляром этого класса.
- RoleTable — содержит операции базы данных для таблицы, в котором хранятся роли.
- UserClaimsTable — содержит операции базы данных для таблицы, в котором хранятся утверждения пользователей.
- UserLoginsTable — содержит операции базы данных для таблицы, в котором хранятся сведения для входа пользователя.
- UserRoleTable — содержит операции базы данных для таблицы, в которой хранятся пользователи, которым назначены роли.
- UserTable — содержит операции базы данных для таблицы, в котором хранятся пользователи.
Создание экземпляра базы данных MySQL в Azure
- Войдите на портал Azure.
- Нажмите кнопку +СОЗДАТЬ в нижней части страницы, а затем выберите STORE.
- В мастере выбора и надстроек выберите ClearDB MySQL Database и щелкните стрелку "Далее" в правом нижнем углу диалогового окна.
- Оставьте план Бесплатный по умолчанию и измените имя на IdentityMySQLDatabase. Выберите ближайший к вам регион и щелкните стрелку "Далее".
- Установите флажок, чтобы завершить создание базы данных.
- После создания базой данных можно управлять на вкладке НАДСТРОЙКИ портала управления.
- Чтобы получить сведения о подключении к базе данных, щелкните Сведения о подключении в нижней части страницы.
- Скопируйте строку подключения, нажав кнопку копирования, и сохраните ее, чтобы использовать ее позже в приложении MVC.
Создание таблиц удостоверений ASP.NET в базе данных MySQL
Установка средства MySQL Workbench для подключения к базе данных MySQL и управления ею
- Установка средства MySQL Workbench со страницы загрузки MySQL
- Запустите приложение и добавьте кнопку MySQLConnections + , чтобы добавить новое подключение. Используйте данные строки подключения, скопированные из базы данных Azure MySQL, созданной ранее в этом руководстве.
- После установки подключения откройте новую вкладку Запрос ; Вставьте команды из MySQLIdentity.sql в запрос и выполните его, чтобы создать таблицы базы данных.
- Теперь все необходимые таблицы ASP.NET Identity созданы в базе данных MySQL, размещенной в Azure, как показано ниже.
Создание проекта приложения MVC на основе шаблона и его настройка для использования поставщика MySQL
При необходимости установите Visual Studio Express 2013 для Web или Visual Studio 2013 с обновлением 2.
Скачайте ASP.NET. Проект Identity.MySQL из GitHub
- Перейдите по URL-адресу репозитория aspNet.Identity.MySQL (GitHub).
- Скачайте исходный код.
- Извлеките файл .zip в локальную папку.
- Откройте решение AspNet.Identity.MySQL и выполните сборку.
Создание проекта приложения MVC на основе шаблона
Щелкните правой кнопкой мыши решение AspNet.Identity.MySQL и добавьтеновый проект.
В диалоговом окне Добавление нового проекта выберите Visual C# слева, а затем — Интернет , а затем ASP.NET Веб-приложение. Присвойте проекту имя IdentityMySQLDemo; и нажмите кнопку ОК.
В диалоговом окне Новый проект ASP.NET выберите шаблон MVC с параметрами по умолчанию (включая отдельные учетные записи пользователей в качестве метода проверки подлинности) и нажмите кнопку ОК.
В Обозреватель решений щелкните правой кнопкой мыши проект IdentityMySQLDemo и выберите Управление пакетами NuGet. В диалоговом окне поиска введите Identity.EntityFramework. Выберите этот пакет в списке результатов и нажмите кнопку Удалить. Вам будет предложено удалить пакет зависимостей EntityFramework. Щелкните Да, так как мы больше не будем использовать этот пакет в этом приложении.
Щелкните правой кнопкой мыши проект IdentityMySQLDemo, выберите Добавить, Ссылка, Решение, Проекты, выберите проект AspNet.Identity.MySQL и нажмите кнопку ОК.
В проекте IdentityMySQLDemo замените все ссылки на
using Microsoft.AspNet.Identity.EntityFramework;
на
using AspNet.Identity.MySQL;
В IdentityModels.cs задайте для ApplicationDbContext значение наследование от MySqlDatabase и включите конструктор, который принимает один параметр с именем подключения.
public class ApplicationDbContext : MySQLDatabase { public ApplicationDbContext(string connectionName) : base(connectionName) { } public static ApplicationDbContext Create() { return new ApplicationDbContext("DefaultConnection"); } }
Откройте файл IdentityConfig.cs. В методе ApplicationUserManager.Create замените экземпляр UserManager следующим кодом:
var manager = new ApplicationUserManager( new UserStore<ApplicationUser>( context.Get<ApplicationDbContext>() as MySQLDatabase));
Откройте файл web.config и замените строку DefaultConnection этой записью, заменив выделенные значения строкой подключения базы данных MySQL, созданной на предыдущих шагах:
<add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase; Data Source=<DataSource>;User Id=<UserID>;Password=<Password>" providerName="MySql.Data.MySqlClient" />
Запуск приложения и подключение к базе данных MySQL
Щелкните правой кнопкой мыши проект IdentityMySQLDemo и выберите Пункт На выбор в качестве запускаемого проекта.
Нажмите клавиши CTRL+F5 , чтобы создать и запустить приложение.
Щелкните вкладку Регистрация в верхней части страницы.
Введите новое имя пользователя и пароль, а затем щелкните Зарегистрировать.
Новый пользователь зарегистрирован и вошел в систему.
Назад к средству MySQL Workbench и проверьте содержимое таблицы IdentityMySQLDatabase. Проверяйте записи в таблице users при регистрации новых пользователей.
Next Steps
Дополнительные сведения о том, как включить другие методы проверки подлинности в этом приложении, см. в разделах Создание приложения ASP.NET MVC 5 с помощью Facebook и Google OAuth2 и входа OpenID.
Сведения об интеграции базы данных с OAuth и настройке ролей для ограничения доступа пользователей к приложению см. в статье Развертывание приложения secure ASP.NET MVC 5 с членством, OAuth и База данных SQL в Azure.