Implementowanie niestandardowego dostawcy magazynu MySQL dla systemu ASP.NET Identity

Autor : Raquel Soares De Almeida, Suhas Joshi, Tom FitzMacken

ASP.NET Identity to rozszerzalny system, który umożliwia tworzenie własnego dostawcy magazynu i podłączanie go do aplikacji bez ponownego działania aplikacji. W tym temacie opisano sposób tworzenia dostawcy magazynu MySQL dla usługi ASP.NET Identity. Aby zapoznać się z omówieniem tworzenia niestandardowych dostawców magazynu, zobacz Overview of Custom Storage Providers for ASP.NET Identity (Omówienie niestandardowych dostawców magazynu dla tożsamości ASP.NET).

Aby ukończyć ten samouczek, musisz mieć Visual Studio 2013 z aktualizacją Update 2.

Ten samouczek obejmuje następujące elementy:

  • Pokaż, jak utworzyć wystąpienie bazy danych MySQL na platformie Azure.
  • Pokaż, jak używać narzędzia klienckiego MySQL (MySQL Workbench) do tworzenia tabel i zarządzania zdalną bazą danych na platformie Azure.
  • Pokaż, jak zastąpić domyślną implementację magazynu tożsamości ASP.NET implementacją niestandardową w projekcie aplikacji MVC.

Ten samouczek został pierwotnie napisany przez Raquela Soaresa De Almeida i Ricka Andersona ( @RickAndMSFT ). Przykładowy projekt został zaktualizowany dla tożsamości 2.0 przez Suhas Joshi. Temat został zaktualizowany dla tożsamości 2.0 przez Toma FitzMacken.

Pobieranie ukończonego projektu

Na końcu tego samouczka będziesz mieć projekt aplikacji MVC z usługą ASP.NET Identity współpracującą z bazą danych MySQL hostowaną na platformie Azure.

Ukończonego dostawcę magazynu MySQL można pobrać na stronie AspNet.Identity.MySQL (GitHub).

Kroki, które wykonasz

W tym samouczku wykonasz następujące elementy:

  1. Tworzenie bazy danych MySQL na platformie Azure
  2. Tworzenie tabel ASP.NET Identity w programie MySQL
  3. Tworzenie aplikacji MVC i konfigurowanie jej do korzystania z dostawcy MySQL
  4. Uruchamianie aplikacji

Ten temat nie obejmuje architektury ASP.NET Identity i decyzji, które należy podjąć podczas implementowania dostawcy magazynu klienta. Aby uzyskać te informacje, zobacz Overview of Custom Storage Providers for ASP.NET Identity (Omówienie niestandardowych dostawców magazynu dla tożsamości ASP.NET).

Przegląd klas dostawcy magazynu MySQL

Przed przejściem do kroków tworzenia dostawcy magazynu MySQL przyjrzyjmy się klasom tworzącym dostawcę magazynu. Do zarządzania użytkownikami i rolami będą potrzebne klasy, które zarządzają operacjami i klasami bazy danych, które są wywoływane z aplikacji.

Klasy magazynu

  • IdentityUser — zawiera właściwości użytkownika.
  • UserStore — zawiera operacje dodawania, aktualizowania lub pobierania użytkowników.
  • IdentityRole — zawiera właściwości ról.
  • RoleStore — zawiera operacje dodawania, usuwania, aktualizowania i pobierania ról.

Klasy warstw dostępu do danych

W tym przykładzie klasy warstwy dostępu do danych zawierają instrukcje SQL do pracy z tabelami; Jednak w kodzie możesz chcieć użyć mapowania relacyjnego (ORM), takiego jak Entity Framework lub NHibernate. W szczególności aplikacja może doświadczyć niskiej wydajności bez maszyny ORM, która obejmuje leniwe ładowanie i buforowanie obiektów.

  • MySQLDatabase — zawiera połączenie bazy danych MySQL i metody wykonywania operacji bazy danych. Wystąpienia magazynu użytkowników i magazynu ról są tworzone przy użyciu wystąpienia tej klasy.
  • RoleTable — zawiera operacje bazy danych dla tabeli, w której są przechowywane role.
  • UserClaimsTable — zawiera operacje bazy danych dla tabeli, w której są przechowywane oświadczenia użytkowników.
  • UserLoginsTable — zawiera operacje bazy danych dla tabeli, w której są przechowywane informacje logowania użytkownika.
  • UserRoleTable — zawiera operacje bazy danych dla tabeli, w której są przypisywani użytkownicy.
  • UserTable — zawiera operacje bazy danych dla tabeli, która przechowuje użytkowników.

Tworzenie wystąpienia bazy danych MySQL na platformie Azure

  1. Zaloguj się do witryny Azure Portal.
  2. Kliknij pozycję +NOWY w dolnej części strony, a następnie wybierz pozycję SKLEP.
    Obraz przedstawiający sposób uzyskiwania dostępu do sklepu w witrynie Azure Portal
  3. W kreatorze Wybieranie i dodawanie wybierz pozycję ClearDB MySQL Database i kliknij strzałkę w prawym dolnym rogu okna dialogowego.
    Obraz przedstawiający ad-on bazy danych Clear D B My S Q L Database
  4. Zachowaj domyślny plan Bezpłatny i zmień wartość pola Nazwa na IdentityMySQLDatabase. Wybierz najbliższy region, a następnie kliknij strzałkę dalej.
    Obraz przedstawiający wybrany plan bezpłatny i nazwę
  5. Kliknij znacznik wyboru, aby ukończyć tworzenie bazy danych.
    Obraz przedstawiający przegląd zakupów i tworzenia bazy danych
  6. Po utworzeniu bazy danych możesz zarządzać nią z poziomu karty ADD-ONS w portalu zarządzania.
    Obraz karty dodatków
  7. Informacje o połączeniu z bazą danych można uzyskać, klikając pozycję INFORMACJE O POŁĄCZENIU w dolnej części strony.
    Obraz przedstawiający lokalizację informacji o połączeniu
  8. Skopiuj parametry połączenia, klikając przycisk kopiowania i zapisując go, aby można było użyć ich później w aplikacji MVC.
    Obraz przedstawiający parametry połączenia i język U R L

Tworzenie tabel ASP.NET Identity w bazie danych MySQL

Instalowanie narzędzia MySQL Workbench w celu nawiązywania połączenia z bazą danych MySQL i zarządzania nią

  1. Instalowanie narzędzia MySQL Workbench ze strony pobierania bazy danych MySQL
  2. Uruchom aplikację, a następnie kliknij przycisk MySQLConnections + w celu dodania nowego połączenia. Użyj danych parametrów połączenia skopiowanych z bazy danych Azure MySQL utworzonej wcześniej w tym samouczku.
  3. Po nawiązaniu połączenia otwórz nową kartę Zapytanie ; Wklej polecenia z bazy danych MySQLIdentity.sql do zapytania i wykonaj je w celu utworzenia tabel bazy danych.
  4. Masz teraz wszystkie tabele niezbędne ASP.NET Identity utworzone w bazie danych MySQL hostowanej na platformie Azure, jak pokazano poniżej.
    Obraz przedstawiający tabele niezbędne do obsługi tożsamości

Tworzenie projektu aplikacji MVC na podstawie szablonu i konfigurowanie go do używania dostawcy MySQL

W razie potrzeby zainstaluj program Visual Studio Express 2013 for Web lub Visual Studio 2013 z aktualizacją Update 2.

Pobierz ASP.NET. Projekt Identity.MySQL z usługi GitHub

  1. Przejdź do adresu URL repozytorium pod adresem AspNet.Identity.MySQL (GitHub).
  2. Pobierz kod źródłowy.
  3. Wyodrębnij plik .zip do folderu lokalnego.
  4. Otwórz rozwiązanie AspNet.Identity.MySQL i skompiluj je.

Tworzenie nowego projektu aplikacji MVC na podstawie szablonu

  1. Kliknij prawym przyciskiem myszy rozwiązanie AspNet.Identity.MySQL i dodaj nowy projekt

  2. W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Visual C# po lewej stronie, a następnie pozycję Sieć Web , a następnie wybierz pozycję ASP.NET Aplikacja internetowa. Nadaj projektowi nazwę IdentityMySQLDemo; a następnie kliknij przycisk OK.

    Obraz okna dialogowego dodawania nowego projektu

  3. W oknie dialogowym Nowy projekt ASP.NET wybierz szablon MVC z opcjami domyślnymi (obejmującymi indywidualne konta użytkowników jako metodę uwierzytelniania) i kliknij przycisk OK. Obraz okna dialogowego nowego projektu A S P dot N E T

  4. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt IdentityMySQLDemo i wybierz pozycję Zarządzaj pakietami NuGet. W oknie dialogowym wyszukiwania wpisz Identity.EntityFramework. Wybierz ten pakiet na liście wyników, a następnie kliknij przycisk Odinstaluj. Zostanie wyświetlony monit o odinstalowanie pakietu zależności EntityFramework. Kliknij pozycję Tak, ponieważ nie będziemy już tego pakietu w tej aplikacji.

  5. Kliknij prawym przyciskiem myszy projekt IdentityMySQLDemo, wybierz pozycję Dodaj, Odwołanie, Rozwiązanie, Projekty; wybierz projekt AspNet.Identity.MySQL i kliknij przycisk OK.

  6. W projekcie IdentityMySQLDemo zastąp wszystkie odwołania do
    using Microsoft.AspNet.Identity.EntityFramework;
    with
    using AspNet.Identity.MySQL;

  7. W pliku IdentityModels.cs ustaw parametr ApplicationDbContext , aby pochodził z bazy danych MySqlDatabase i uwzględnij konstruktor, który przyjmuje pojedynczy parametr o nazwie połączenia.

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
    
  8. Otwórz plik IdentityConfig.cs. W metodzie ApplicationUserManager.Create zastąp wystąpienie klasy UserManager następującym kodem:

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
    
  9. Otwórz plik web.config i zastąp ciąg DefaultConnection tym wpisem, zastępując wyróżnione wartości parametrami połączenia bazy danych MySQL utworzonymi w poprzednich krokach:

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

Uruchamianie aplikacji i nawiązywanie połączenia z bazą danych MySQL

  1. Kliknij prawym przyciskiem myszy projekt IdentityMySQLDemo i wybierz pozycję Ustaw jako projekt startowy

  2. Naciśnij klawisze Ctrl + F5 , aby skompilować i uruchomić aplikację.

  3. Kliknij kartę Zarejestruj w górnej części strony.

  4. Wprowadź nową nazwę użytkownika i hasło, a następnie kliknij pozycję Zarejestruj.

    Obraz przedstawiający nową nazwę użytkownika i hasło

  5. Nowy użytkownik jest teraz zarejestrowany i zalogowany.

    Ilustracja przedstawiająca, że nowy użytkownik jest zarejestrowany i zalogowany

  6. Wstecz do narzędzia MySQL Workbench i sprawdź zawartość tabeli IdentityMySQLDatabase. Sprawdź tabelę użytkowników pod kątem wpisów podczas rejestrowania nowych użytkowników.

    Obraz narzędzia Inspekcja aplikacji My S Q L Workbench

Następne kroki

Aby uzyskać więcej informacji na temat włączania innych metod uwierzytelniania w tej aplikacji, zobacz Create an ASP.NET MVC 5 App with Facebook and Google OAuth2 and OpenID Sign-on (Tworzenie aplikacji MVC 5 przy użyciu usług Facebook i Google OAuth2 i OpenID).

Aby dowiedzieć się, jak zintegrować bazę danych z usługą OAuth i skonfigurować role w celu ograniczenia dostępu użytkowników do aplikacji, zobacz Deploy a Secure ASP.NET MVC 5 app with Membership, OAuth, and SQL Database to Azure (Wdrażanie aplikacji Secure ASP.NET MVC 5 z członkostwem, OAuth i SQL Database na platformie Azure).