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


Реализация пользовательского поставщика хранилища для поставщика хранилища 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).

Действия, которые вы будете выполнять

Изучив данный учебник, вы научитесь:

  1. Создание базы данных MySQL в Azure
  2. Создание таблиц удостоверений ASP.NET в MySQL
  3. Создание приложения MVC и настройка его для использования поставщика MySQL
  4. Запуск приложения

В этом разделе не рассматривается архитектура 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

  1. Войдите на портал Azure.
  2. Нажмите кнопку +СОЗДАТЬ в нижней части страницы, а затем выберите STORE.
    Изображение, показывающее, как получить доступ к хранилищу на портале Azure
  3. В мастере выбора и надстроек выберите ClearDB MySQL Database и щелкните стрелку "Далее" в правом нижнем углу диалогового окна.
    Изображение: объявление о включении базы данных Clear D B My S Q L
  4. Оставьте план Бесплатный по умолчанию и измените имя на IdentityMySQLDatabase. Выберите ближайший к вам регион и щелкните стрелку "Далее".
    Изображение выбранного бесплатного плана и его имя
  5. Установите флажок, чтобы завершить создание базы данных.
    Изображение проверки покупки и создания базы данных
  6. После создания базой данных можно управлять на вкладке НАДСТРОЙКИ портала управления.
    Изображение вкладки надстроек
  7. Чтобы получить сведения о подключении к базе данных, щелкните Сведения о подключении в нижней части страницы.
    Изображение, показывающее расположение сведений о подключении
  8. Скопируйте строку подключения, нажав кнопку копирования, и сохраните ее, чтобы использовать ее позже в приложении MVC.
    Изображение строки подключения и U R L

Создание таблиц удостоверений ASP.NET в базе данных MySQL

Установка средства MySQL Workbench для подключения к базе данных MySQL и управления ею

  1. Установка средства MySQL Workbench со страницы загрузки MySQL
  2. Запустите приложение и добавьте кнопку MySQLConnections + , чтобы добавить новое подключение. Используйте данные строки подключения, скопированные из базы данных Azure MySQL, созданной ранее в этом руководстве.
  3. После установки подключения откройте новую вкладку Запрос ; Вставьте команды из MySQLIdentity.sql в запрос и выполните его, чтобы создать таблицы базы данных.
  4. Теперь все необходимые таблицы ASP.NET Identity созданы в базе данных MySQL, размещенной в Azure, как показано ниже.
    Изображение, показывающее таблицы, необходимые для идентификации

Создание проекта приложения MVC на основе шаблона и его настройка для использования поставщика MySQL

При необходимости установите Visual Studio Express 2013 для Web или Visual Studio 2013 с обновлением 2.

Скачайте ASP.NET. Проект Identity.MySQL из GitHub

  1. Перейдите по URL-адресу репозитория aspNet.Identity.MySQL (GitHub).
  2. Скачайте исходный код.
  3. Извлеките файл .zip в локальную папку.
  4. Откройте решение AspNet.Identity.MySQL и выполните сборку.

Создание проекта приложения MVC на основе шаблона

  1. Щелкните правой кнопкой мыши решение AspNet.Identity.MySQL и добавьтеновый проект.

  2. В диалоговом окне Добавление нового проекта выберите Visual C# слева, а затем — Интернет , а затем ASP.NET Веб-приложение. Присвойте проекту имя IdentityMySQLDemo; и нажмите кнопку ОК.

    Изображение диалогового окна добавления нового проекта

  3. В диалоговом окне Новый проект ASP.NET выберите шаблон MVC с параметрами по умолчанию (включая отдельные учетные записи пользователей в качестве метода проверки подлинности) и нажмите кнопку ОК. Изображение нового диалогового окна проекта точки A S P N E T

  4. В Обозреватель решений щелкните правой кнопкой мыши проект IdentityMySQLDemo и выберите Управление пакетами NuGet. В диалоговом окне поиска введите Identity.EntityFramework. Выберите этот пакет в списке результатов и нажмите кнопку Удалить. Вам будет предложено удалить пакет зависимостей EntityFramework. Щелкните Да, так как мы больше не будем использовать этот пакет в этом приложении.

  5. Щелкните правой кнопкой мыши проект IdentityMySQLDemo, выберите Добавить, Ссылка, Решение, Проекты, выберите проект AspNet.Identity.MySQL и нажмите кнопку ОК.

  6. В проекте IdentityMySQLDemo замените все ссылки на
    using Microsoft.AspNet.Identity.EntityFramework;
    на
    using AspNet.Identity.MySQL;

  7. В IdentityModels.cs задайте для ApplicationDbContext значение наследование от MySqlDatabase и включите конструктор, который принимает один параметр с именем подключения.

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
    
  8. Откройте файл IdentityConfig.cs. В методе ApplicationUserManager.Create замените экземпляр UserManager следующим кодом:

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
    
  9. Откройте файл web.config и замените строку DefaultConnection этой записью, заменив выделенные значения строкой подключения базы данных MySQL, созданной на предыдущих шагах:

    <add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase;
    Data Source=<DataSource>;User Id=<UserID>;Password=<Password>"
    providerName="MySql.Data.MySqlClient" />
    

Запуск приложения и подключение к базе данных MySQL

  1. Щелкните правой кнопкой мыши проект IdentityMySQLDemo и выберите Пункт На выбор в качестве запускаемого проекта.

  2. Нажмите клавиши CTRL+F5 , чтобы создать и запустить приложение.

  3. Щелкните вкладку Регистрация в верхней части страницы.

  4. Введите новое имя пользователя и пароль, а затем щелкните Зарегистрировать.

    Изображение, показывающее новое имя пользователя и пароль

  5. Новый пользователь зарегистрирован и вошел в систему.

    Иллюстрация, показывающая, что новый пользователь зарегистрирован и вошел в систему

  6. Назад к средству MySQL Workbench и проверьте содержимое таблицы IdentityMySQLDatabase. Проверяйте записи в таблице users при регистрации новых пользователей.

    Изображение средства проверки My S Q L Workbench

Next Steps

Дополнительные сведения о том, как включить другие методы проверки подлинности в этом приложении, см. в разделах Создание приложения ASP.NET MVC 5 с помощью Facebook и Google OAuth2 и входа OpenID.

Сведения об интеграции базы данных с OAuth и настройке ролей для ограничения доступа пользователей к приложению см. в статье Развертывание приложения secure ASP.NET MVC 5 с членством, OAuth и База данных SQL в Azure.