Implémentation d’un fournisseur de stockage ASP.NET Identity MySQL personnalisé

par Raquel Soares De Almeida, Suhas Joshi, Tom FitzMacken

ASP.NET Identity est un système extensible qui vous permet de créer votre propre fournisseur de stockage et de le connecter à votre application sans re-travailler l’application. Cette rubrique explique comment créer un fournisseur de stockage MySQL pour ASP.NET Identity. Pour obtenir une vue d’ensemble de la création de fournisseurs de stockage personnalisés, consultez Vue d’ensemble des fournisseurs de stockage personnalisés pour ASP.NET Identity.

Pour suivre ce tutoriel, vous devez avoir Visual Studio 2013 avec Update 2.

Ce tutoriel va :

  • Montrez comment créer une base de données MySQL instance sur Azure.
  • Montrez comment utiliser un outil client MySQL (MySQL Workbench) pour créer des tables et gérer votre base de données distante sur Azure.
  • Montrez comment remplacer l’implémentation de stockage ASP.NET Identity par défaut par notre implémentation personnalisée sur un projet d’application MVC.

Ce tutoriel a été écrit à l’origine par Raquel Soares De Almeida et Rick Anderson ( @RickAndMSFT ). L’exemple de projet a été mis à jour pour Identity 2.0 par Suhas Joshi. La rubrique a été mise à jour pour Identity 2.0 par Tom FitzMacken.

Télécharger le projet terminé

À la fin de ce tutoriel, vous aurez un projet d’application MVC avec ASP.NET Identity travaillant avec une base de données MySQL hébergée sur Azure.

Vous pouvez télécharger le fournisseur de stockage MySQL terminé à l’adresse AspNet.Identity.MySQL (GitHub).

Les étapes que vous allez effectuer

Ce didacticiel vous apprendra à effectuer les opérations suivantes :

  1. Créer une base de données MySQL sur Azure
  2. Créer les tables d’identité ASP.NET dans MySQL
  3. Créer une application MVC et la configurer pour utiliser le fournisseur MySQL
  4. Exécuter l’application

Cette rubrique ne couvre pas l’architecture de ASP.NET Identity et les décisions que vous devez prendre lors de l’implémentation d’un fournisseur de stockage client. Pour obtenir ces informations, consultez Vue d’ensemble des fournisseurs de stockage personnalisés pour ASP.NET Identity.

Passer en revue les classes de fournisseur de stockage MySQL

Avant de passer à la procédure de création du fournisseur de stockage MySQL, examinons les classes qui composent le fournisseur de stockage. Vous aurez besoin de classes qui gèrent les opérations de base de données et les classes appelées à partir de l’application pour gérer les utilisateurs et les rôles.

Classes de stockage

  • IdentityUser : contient des propriétés pour l’utilisateur.
  • UserStore : contient des opérations d’ajout, de mise à jour ou de récupération d’utilisateurs.
  • IdentityRole : contient des propriétés pour les rôles.
  • RoleStore : contient des opérations d’ajout, de suppression, de mise à jour et de récupération de rôles.

Classes de couche d’accès aux données

Pour cet exemple, les classes de couche d’accès aux données contiennent des instructions SQL permettant d’utiliser les tables ; Toutefois, dans votre code, vous pouvez utiliser le mappage objet-relationnel (ORM), tel qu’Entity Framework ou NHibernate. En particulier, votre application peut rencontrer des performances médiocres sans orm qui inclut le chargement paresseux et la mise en cache des objets.

  • MySQLDatabase : contient la connexion à la base de données MySQL et les méthodes permettant d’effectuer des opérations de base de données. UserStore et RoleStore sont tous deux instanciés avec un instance de cette classe.
  • RoleTable : contient des opérations de base de données pour la table qui stocke les rôles.
  • UserClaimsTable : contient les opérations de base de données pour la table qui stocke les revendications utilisateur.
  • UserLoginsTable : contient des opérations de base de données pour la table qui stocke les informations de connexion utilisateur.
  • UserRoleTable : contient des opérations de base de données pour la table qui stocke les utilisateurs auxquels sont attribués les rôles.
  • UserTable : contient les opérations de base de données pour la table qui stocke les utilisateurs.

Créer une base de données MySQL instance sur Azure

  1. Connectez-vous au portail Azure.
  2. Cliquez sur +NOUVEAU en bas de la page, puis sélectionnez STORE.
    Image montrant comment accéder au magasin du portail Azure
  3. Dans l’Assistant Choisir et ajouter , sélectionnez ClearDB MySQL Database et cliquez sur la flèche suivante en bas à droite de la boîte de dialogue.
    Image affichant l’annonce Clear D B My S Q L Database
  4. Conservez le plan Gratuit par défaut et remplacez le Nom par IdentityMySQLDatabase. Sélectionnez la région la plus proche de vous, puis cliquez sur la flèche suivante.
    Image du plan gratuit sélectionné et nom
  5. Cliquez sur la coche pour terminer la création de la base de données.
    Image de l’achat de révision et de la création de base de données
  6. Une fois la base de données créée, vous pouvez la gérer à partir de l’onglet ADD-ONS du portail de gestion.
    Image de l’onglet Modules complémentaires
  7. Vous pouvez obtenir les informations de connexion à la base de données en cliquant sur INFORMATIONS DE CONNEXION en bas de la page.
    Image montrant l’emplacement des informations de connexion
  8. Copiez la chaîne de connexion en cliquant sur le bouton copier et enregistrez-la afin de pouvoir l’utiliser ultérieurement dans votre application MVC.
    Image montrant la chaîne de connexion et l’U R L

Créer les tables d’identité ASP.NET dans une base de données MySQL

Installer l’outil MySQL Workbench pour connecter et gérer la base de données MySQL

  1. Installer l’outil MySQL Workbench à partir de la page de téléchargements MySQL
  2. Lancez l’application et cliquez sur le bouton MySQLConnections + pour ajouter une nouvelle connexion. Utilisez les données de chaîne de connexion que vous avez copiées à partir de la base de données Azure MySQL que vous avez créée précédemment dans ce didacticiel.
  3. Après avoir établi la connexion, ouvrez un nouvel onglet Requête ; collez les commandes de MySQLIdentity.sql dans la requête et exécutez-la afin de créer les tables de base de données.
  4. Vous disposez maintenant de toutes les tables ASP.NET Identity nécessaires créées sur une base de données MySQL hébergée sur Azure, comme indiqué ci-dessous.
    Image montrant les tables d’identité nécessaires

Créer un projet d’application MVC à partir d’un modèle et le configurer pour utiliser le fournisseur MySQL

Si nécessaire, installez Visual Studio Express 2013 pour web ou Visual Studio 2013 avec Update 2.

Téléchargez le ASP.NET. Projet Identity.MySQL à partir de GitHub

  1. Accédez à l’URL du dépôt à l’adresse AspNet.Identity.MySQL (GitHub).
  2. Téléchargez le code source.
  3. Extrayez le fichier .zip dans un dossier local.
  4. Ouvrez la solution AspNet.Identity.MySQL et générez-la.

Créer un projet d’application MVC à partir d’un modèle

  1. Cliquez avec le bouton droit sur la solution AspNet.Identity.MySQL et Ajouter, Nouveau projet

  2. Dans la boîte de dialogue Ajouter un nouveau projet , sélectionnez Visual C# sur la gauche, puis Web , puis ASP.NET application web. Nommez votre projet IdentityMySQLDemo ; puis cliquez sur OK.

    Image de la boîte de dialogue Ajouter un nouveau projet

  3. Dans la boîte de dialogue Nouveau projet ASP.NET , sélectionnez le modèle MVC avec les options par défaut (qui inclut les comptes d’utilisateur individuels en tant que méthode d’authentification), puis cliquez sur OK. Image de la nouvelle fenêtre de boîte de dialogue projet A S P dot N E T

  4. Dans Explorateur de solutions, cliquez avec le bouton droit sur votre projet IdentityMySQLDemo et sélectionnez Gérer les packages NuGet. Dans la boîte de dialogue de recherche, tapez Identity.EntityFramework. Sélectionnez ce package dans la liste des résultats, puis cliquez sur Désinstaller. Vous serez invité à désinstaller le package de dépendances EntityFramework. Cliquez sur Oui, car nous n’aurons plus ce package sur cette application.

  5. Cliquez avec le bouton droit sur le projet IdentityMySQLDemo, sélectionnez Ajouter, Référence, Solution, Projets ; sélectionnez le projet AspNet.Identity.MySQL, puis cliquez sur OK.

  6. Dans le projet IdentityMySQLDemo, remplacez toutes les références à
    using Microsoft.AspNet.Identity.EntityFramework;
    par
    using AspNet.Identity.MySQL;

  7. Dans IdentityModels.cs, définissez ApplicationDbContext pour qu’il dérive de MySqlDatabase et incluez un constructeur qui prend un seul paramètre avec le nom de connexion.

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
    
  8. Ouvrez le fichier IdentityConfig.cs. Dans la méthode ApplicationUserManager.Create , remplacez l’instanciation de UserManager par le code suivant :

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
    
  9. Ouvrez le fichier web.config et remplacez la chaîne DefaultConnection par cette entrée en remplaçant les valeurs en surbrillance par la chaîne de connexion de la base de données MySQL que vous avez créée lors des étapes précédentes :

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

Exécutez l’application et connectez-vous à la base de données MySQL

  1. Cliquez avec le bouton droit sur le projet IdentityMySQLDemo et sélectionnez Définir comme projet de démarrage

  2. Appuyez sur Ctrl + F5 pour générer et exécuter l’application.

  3. Cliquez sur l’onglet Inscrire en haut de la page.

  4. Entrez un nouveau nom d’utilisateur et un nouveau mot de passe, puis cliquez sur Inscrire.

    Image montrant le nouveau nom d’utilisateur et le nouveau mot de passe

  5. Le nouvel utilisateur est maintenant inscrit et connecté.

    Illustration montrant que le nouvel utilisateur est inscrit et connecté

  6. Retour à l’outil MySQL Workbench et inspectez le contenu de la table IdentityMySQLDatabase. Inspectez la table des utilisateurs pour les entrées lorsque vous inscrivez de nouveaux utilisateurs.

    Image de l’outil d’inspection My S Q L Workbench

Étapes suivantes

Pour plus d’informations sur l’activation d’autres méthodes d’authentification sur cette application, consultez Créer une application MVC 5 ASP.NET avec Facebook et Google OAuth2 et OpenID Sign-on.

Pour savoir comment intégrer votre base de données à OAuth et configurer des rôles afin de limiter l’accès des utilisateurs à votre application, consultez Déployer une application sécurisée ASP.NET MVC 5 avec appartenance, OAuth et SQL Database dans Azure.