Share via


Implementar un proveedor de almacenamiento personalizado de ASP.NET Identity de MySQL

de Isabel Soares de Almeida, Suhas Joshi, Tom FitzMacken

ASP.NET Identity es un sistema extensible que permite crear su propio proveedor de almacenamiento y conectarlo a la aplicación sin volver a trabajar en ella. En este tema se describe cómo crear un proveedor de almacenamiento MySQL para ASP.NET Identity. Para obtener información general sobre la creación de proveedores de almacenamiento personalizados, consulte Introducción a los proveedores de almacenamiento personalizados para ASP.NET Identity.

Para completar este tutorial, debe tener Visual Studio 2013 con la Actualización 2.

Este tutorial describe las siguientes acciones:

  • Mostrar cómo crear una instancia de base de datos MySQL en Azure.
  • Mostrar cómo usar una herramienta cliente MySQL (MySQL Workbench) para crear tablas y administrar la base de datos remota en Azure.
  • Mostrar cómo reemplazar la implementación predeterminada de ASP.NET Identity Storage por nuestra implementación personalizada en un proyecto de aplicación MVC.

Este tutorial lo escribieron originalmente Sara Soares de Almeida y Rick Anderson (@RickAndMSFT). Suhas Joshi actualizó el proyecto de ejemplo para Identity 2.0. Tom FitzMacken actualizó el tema para Identity 2.0.

Descargar el proyecto completado

Al final de este tutorial, tendrá un proyecto de aplicación de MVC con ASP.NET Identity que trabaja con una base de datos MySQL hospedada en Azure.

Puede descargar el proveedor de almacenamiento MySQL completado en AspNet.Identity.MySQL (GitHub).

Los pasos que realizará

En este tutorial, aprenderá lo siguiente:

  1. Crear una base de datos MySQL en Azure
  2. Crear las tablas ASP.NET Identity en MySQL
  3. Crear una aplicación MVC y configurarla para usar el proveedor MySQL
  4. Ejecución de la aplicación

En este tema no se trata la arquitectura de ASP.NET Identity y las decisiones que debe tomar al implementar un proveedor de almacenamiento de clientes. Para ello, consulte Información general sobre los proveedores de almacenamiento personalizado para ASP.NET Identity.

Revisión de las clases del proveedor de almacenamiento MySQL

Antes de ir a los pasos para crear el proveedor de almacenamiento MySQL, echemos un vistazo a las clases que componen el proveedor de almacenamiento. Necesitará clases que administren las operaciones y clases de base de datos a las que se llama desde la aplicación para administrar usuarios y roles.

Clases de almacenamiento

  • IdentityUser: contiene propiedades para el usuario.
  • UserStore: contiene operaciones para agregar, actualizar o recuperar usuarios.
  • IdentityRole: contiene propiedades para roles.
  • RoleStore: contiene operaciones para agregar, eliminar, actualizar y recuperar roles.

Clases de capa de acceso a datos

En este ejemplo, las clases de capa de acceso a datos contienen instrucciones SQL para trabajar con las tablas. Sin embargo, en el código es posible que quiera usar la asignación relacional de objetos (ORM), como Entity Framework o NHibernate. En concreto, la aplicación puede experimentar un rendimiento deficiente sin una ORM que incluya la carga diferida y el almacenamiento en caché de objetos.

  • MySQLDatabase: contiene la conexión y los métodos de la base de datos MySQL para realizar operaciones de base de datos. Se crean instancias de UserStore y RoleStore con una instancia de esta clase.
  • RoleTable: contiene operaciones de base de datos para la tabla que almacena roles.
  • UserClaimsTable: contiene operaciones de base de datos para la tabla que almacena roles.
  • UserLoginsTable: contiene operaciones de base de datos para la tabla que almacena información de inicio de sesión de usuario.
  • UserRoleTable: contiene operaciones de base de datos para la tabla que almacena los usuarios a los que se asignan roles.
  • UserTable: contiene operaciones de base de datos para la tabla que almacena usuarios.

Crear una instancia de base de datos MySQL en Azure

  1. Inicie sesión en Azure Portal.
  2. Haga clic en +NUEVO en la parte inferior de la página y, a continuación, seleccione ALMACENAR.
    Image showing how to access the Azure Portal store
  3. En el Asistente para elegir y agregar, seleccione Borrar base de datos MySQL y haga clic en la flecha siguiente situada en la parte inferior derecha del cuadro de diálogo.
    Image displaying the Clear D B My S Q L Database ad-on
  4. Mantenga el plan Gratis predeterminado y cambie el Nombre a IdentityMySQLDatabase. Seleccione la región más cercana y, a continuación, haga clic en la flecha siguiente.
    Image of the free plan selected and name
  5. Haga clic en la marca de verificación para completar la creación de la base de datos.
    Image of review purchase and database creation
  6. Una vez que se ha creado la base de datos, puede administrarla desde la pestaña COMPLEMENTOS del Portal de administración.
    Image of add-ons tab
  7. Puede obtener la información de conexión de la base de datos si hace clic en INFORMACIÓN DE CONEXIÓN en la parte inferior de la página.
    Image showing the connection info location
  8. Haga clic en el botón Copiar para copiar la cadena de conexión y guárdela para usarla más adelante en la aplicación MVC.
    Image showing connection string and U R L

Creación de las tablas ASP.NET Identity en una base de datos MySQL

Instalación de la herramienta MySQL Workbench para conectarse y administrar la base de datos MySQL

  1. Instalación de la herramienta MySQL Workbench desde la página de descargas de MySQL
  2. Inicie la aplicación y haga clic en el botón MySQLConnections + para agregar una nueva conexión. Use los datos de cadena de conexión que copió de la base de datos de Azure MySQL creada anteriormente en este tutorial.
  3. Después de establecer la conexión, abra una nueva pestaña de Consulta; pegue los comandos de MySQLIdentity.sql en la consulta y ejecútela para crear las tablas de base de datos.
  4. Ahora tiene todas las tablas necesarias de ASP.NET Identity creadas en una base de datos MySQL hospedada en Azure, como se muestra a continuación.
    Image showing identity necessary tables

Crear un proyecto de aplicación de MVC a partir de una plantilla y configurarlo para usar el proveedor MySQL

Si es necesario, instale Visual Studio Express 2013 para Web o Visual Studio 2013 con Actualización 2.

Descargar el proyecto ASP.NET.Identity.MySQL desde GitHub

  1. Vaya a la dirección URL del repositorio en AspNet.Identity.MySQL (GitHub).
  2. Descargue el código fuente.
  3. Extraiga el archivo .zip en una carpeta local.
  4. Abra la solución AspNet.Identity.MySQL y compílela.

Creación de un nuevo proyecto de aplicación MVC a partir de una plantilla

  1. Haga clic con el botón derecho en la solución AspNet.Identity.MySQL y Agregar, Nuevo proyecto

  2. En el cuadro de diálogo Agregar nuevo proyecto seleccione Visual C# a la izquierda y, a continuación, Web. Luego, seleccione aplicación web ASP.NET. Asigne al proyecto el nombre IdentityMySQLDemo y, a continuación, haga clic en Aceptar.

    Image of the add new project dialog window

  3. En el cuadro de diálogo Nuevo proyecto ASP.NET, seleccione la plantilla MVC con las opciones predeterminadas (lo que incluye Cuentas de usuario individuales como método de autenticación) y haga clic en Aceptar.Image of the new A S P dot N E T project dialog window

  4. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto IdentityMySQLDemo y seleccione Administrar paquetes NuGet. En el cuadro de texto de búsqueda, escriba Identity.EntityFramework. Seleccione este paquete en la lista de resultados y haga clic en Desinstalar. Se le pedirá que desinstale el paquete de dependencia EntityFramework. Haga clic en Sí, pues ya no se necesitará este paquete en la aplicación.

  5. Haga clic con el botón derecho en el proyecto IdentityMySQLDemo, seleccione Agregar, Referencia, Solución, Proyectos; seleccione el proyecto AspNet.Identity.MySQL y haga clic en Aceptar.

  6. En el proyecto IdentityMySQLDemo, reemplace todas las referencias a
    using Microsoft.AspNet.Identity.EntityFramework;
    con
    using AspNet.Identity.MySQL;

  7. En IdentityModels.cs, establezca ApplicationDbContext para derivarse de MySqlDatabase e incluya un constructor que tome un único parámetro con el nombre de conexión.

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
    
  8. Abra el archivo IdentityConfig.cs. En el método ApplicationUserManager.Create, reemplace la creación de instancias de UserManager por el código siguiente:

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
    
  9. Abra el archivo web.config y reemplace la cadena DefaultConnection por esta entrada (reemplace los valores que aparecen abajo resaltados por la cadena de conexión de la base de datos MySQL que creó en los pasos anteriores):

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

Ejecución de la aplicación y conexión a la base de datos MySQL

  1. Haga clic con el botón derecho en el proyecto IdentityMySQLDemo y seleccione Establecer como proyecto de inicio

  2. Pulse CTRL+F5 para compilar y ejecutar la aplicación.

  3. Haga clic en la pestaña Registrar de la parte superior de la página.

  4. Escriba un nuevo nombre de usuario y una contraseña y, a continuación, haga clic en Registrar.

    Image showing new user name and password

  5. El nuevo usuario ahora está registrado y se ha iniciado su sesión.

    Illustration showing the new user is registered and logged in

  6. Vuelva a la herramienta MySQL Workbench e inspeccione el contenido de la tabla IdentityMySQLDatabase. Inspeccione la tabla users de las entradas a medida que registra nuevos usuarios.

    Image of My S Q L Workbench inspect tool

Pasos siguientes

Para obtener más información sobre cómo habilitar otros métodos de autenticación en esta aplicación, consulte Creación de una aplicación de ASP.NET MVC 5 con Facebook y Google OAuth2 y OpenID Sign-on.

Para obtener información sobre cómo integrar la base de datos con OAuth y configurar roles para limitar el acceso de los usuarios a la aplicación, consulte Implementación de una aplicación segura de ASP.NET MVC 5 con pertenencia, OAuth y SQL Database en Azure.