Configuración del entorno
En esta unidad, obtendrá información sobre la arquitectura de Identity. Para empezar, ejecute un script para configurar el entorno de desarrollo de Linux del módulo. El script descarga un proyecto de inicio multiplataforma y aprovisiona recursos de Azure con el fin de admitir tareas en todo el módulo. Identity se agregará al proyecto de inicio. No es necesaria ninguna experiencia previa con Linux.
Este módulo se centra solo en dos de los posibles almacenes de datos de EF Core que admite Identity. Use el botón de alternancia anterior para seleccionar el que prefiera.
Configuración del entorno de desarrollo
Ejecute el comando siguiente en el shell de comandos. El comando refleja la elección del almacén de datos en el botón de alternancia anterior. Tenga paciencia, ya que la configuración puede tardar unos minutos en completarse. Siga leyendo mientras se ejecuta el script.
. <(wget -q -O - https://aka.ms/secure-aspnet-core-identity-setup) "pg"
. <(wget -q -O - https://aka.ms/secure-aspnet-core-identity-setup) "sql"
Sugerencia
Puede usar el botón Copiar para copiar los comandos en el Portapapeles. Para pegar, haga clic con el botón derecho en una nueva línea en la ventana de Cloud Shell y seleccione Pegar, o bien use el método abreviado de teclado Mayús+Insert (⌘+V en macOS).
El comando anterior recupera y ejecuta un script de configuración desde un repositorio de GitHub. El script realiza los pasos siguientes:
- Clona el código de inicio de ASP.NET Core desde un repositorio de GitHub.
- Compila e implementa una API web de ASP.NET Core para proporcionar datos a la aplicación web.
- Aprovisiona una base de datos para almacenar entidades de marco de Identity.
- Establece las variables de entorno que se necesitan en este módulo.
- Muestra la información de conexión de los recursos de Azure.
- Inicia el editor de Cloud Shell para ver el código de inicio.
Revisión de la arquitectura de ASP.NET Core Identity
ASP.NET Core Identity es un sistema de pertenencia que agrega capacidades de inicio de sesión y registro de usuarios a una interfaz de usuario web de ASP.NET Core. El sistema de pertenencia controla los problemas de autenticación y autorización. La autenticación se refiere a quién es el usuario. La autorización se refiere a lo que se le permite hacer. Por lo tanto, la autenticación es un requisito previo para la autorización.
Como alternativa a la creación de cuentas locales, Identity admite proveedores de inicio de sesión externos, como Facebook y Twitter. Las sesiones de usuario se conservan con autenticación basada en cookies. De forma predeterminada, se crea una cookie al iniciar sesión y se destruye al cerrarla.
Los datos de pertenencia se conservan con el uso de un almacén de datos y la tecnología de acceso a datos de su elección. La tecnología de acceso a datos predeterminada es un asignador relacional de objetos (O/RM) llamado Entity Framework (EF) Core. El almacén de datos predeterminado es SQL Server.
EF Core se encarga de abstraer los pormenores de la interacción con la base de datos subyacente. Por lo tanto, EF Core normalmente permite usar cualquiera de sus proveedores de bases de datos con Identity. Los proveedores de bases de datos están disponibles para PostgreSQL, SQLite y muchos otros almacenes de datos. Sin embargo, PostgreSQL es un proveedor de terceros y, por lo tanto, no es válido para soporte técnico de Microsoft. Identity también proporciona la flexibilidad de usar una tecnología de acceso a datos de su elección. Dapper es una alternativa popular.
En el diagrama siguiente se muestra la arquitectura de Identity usada en este módulo:


En el diagrama anterior:
- La aplicación Razor Pages de ASP.NET Core representa la interfaz de usuario web a la que se va a agregar compatibilidad con Identity en este módulo.
- La capa de Identity Manager contiene clases que se usan desde el espacio de nombres
Microsoft.AspNetCore.Identity.SignInManager<TUser>yUserManager<TUser>representan ejemplos de estas clases utilizadas explícitamente en este módulo. - La capa EF Core Identity Store contiene clases que se usan desde el espacio de nombres
Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser>representa un ejemplo de esta clase usada implícitamente en este módulo. - El Proveedor de bases de datos es una biblioteca específica de la base de datos que acepta SQL a partir del proveedor de EF Core (no aparece en la imagen) y lo ejecuta.
Revisión de los requisitos del proyecto
Las partes interesadas han definido los requisitos empresariales siguientes:
- Existen dos tipos de usuarios autenticados para el sistema: empleados y administradores.
- Los usuarios anónimos no tienen permiso para ver el catálogo de productos.
- Los empleados solo pueden ver el catálogo de productos.
- Los administradores pueden modificar productos.
- Después de iniciar sesión correctamente, el nombre de pila y los apellidos del usuario deben aparecer en el encabezado de la aplicación.
El equipo de desarrollo adopta las decisiones técnicas siguientes:
- Los datos de Identity deben aislarse en su propia base de datos.
- Las tablas de base de datos que admiten Identity deben pertenecer al esquema predeterminado.
- Los administradores se inscriben automáticamente mediante un token de uso único.
- La aplicación debe admitir el inicio de sesión con autenticación multifactor mediante una aplicación de autenticación TOTP.
- Las credenciales de la base de datos deben almacenarse en Azure Key Vault.
Revisión del código de inicio
La aplicación consta de un único proyecto de Razor Pages de ASP.NET Core llamado ContosoPets.Ui. El proyecto contiene la interfaz de usuario para ver y administrar los datos del producto. Los datos del producto se obtienen a través de una API web externa de ASP.NET Core.
Los siguientes archivos y directorios que hay en ContosoPets.Ui son de particular interés:
| Nombre | Descripción |
|---|---|
| Controllers/AdminTokenController.cs | Expone AdminRegistrationTokenService como un punto de conexión HTTP. No usado hasta la unidad 6. |
| Pages/Products/ | Contiene la interfaz de usuario web para las operaciones CRUD. |
| Services/AdminRegistrationTokenService.cs | Genera tokens que permiten a los administradores realizar un registro automático. No usado hasta la unidad 6. |
| Services/ProductService.cs | Administra todas las interacciones con la API web externa de ASP.NET Core. |
| Services/QRCodeService.cs | Administra la creación de códigos QR para admitir la autenticación multifactor. No usado hasta la unidad 5. |
| wwwroot/js/product.js | Habilita la eliminación de un producto de Pages/Products/Index.cshtml sin que haya un postback del lado servidor. |
| Program.cs | Actúa como el punto de entrada principal de la aplicación y registra el proveedor de configuración de Azure Key Vault. |
| Startup.cs | Configura los servicios y la canalización de solicitudes HTTP de la aplicación. |
Nota
Azure Key Vault se utiliza para almacenar y recuperar datos confidenciales de forma segura. El código de inicio lo implementa para demostrar una forma posible de proteger las credenciales de la base de datos. No está relacionado con Identity y, por tanto, no será objeto de estudio de este módulo. Consulte el método ConfigureKeyVault en el archivo Program.cs para el código de registro de Key Vault.
Comprobación de la conectividad de base de datos
Ejecute el siguiente comando:
db -c "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'"
El script ha creado un alias db. El alias corresponde a psql con las opciones --host (nombre de host del servidor), --port (número de puerto), --username y --dbname (nombre de la base de datos). psql obtiene la contraseña de una variable de entorno denominada PGPASSWORD. PSQL es una herramienta de línea de comandos multiplataforma que sirve para administrar y consultar bases de datos de PostgreSQL. El comando anterior recupera una lista de tablas que no son del sistema de la base datos de PostgreSQL que se ha creado anteriormente.
Según lo previsto, la lista está vacía porque la base de datos solo contiene tablas del sistema.
tablename
-----------
(0 rows)
db -Q "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='dbo' ORDER BY TABLE_NAME" -Y 25
El script ha creado un alias db. El alias concuerda sqlcmd con las opciones -U (nombre de usuario), -P (contraseña), -S (nombre del host de servidor) y -d (nombre de la base de datos). sqlcmd es una herramienta de línea de comandos multiplataforma que sirve para administrar y consultar bases de datos de SQL Server. El comando anterior recupera una lista de tablas que no son del sistema de la base de datos de Azure SQL Database que se ha creado anteriormente.
Según lo previsto, la lista está vacía porque no hay ninguna tabla en el esquema dbo de la base de datos.
TABLE_NAME
-------------------------
(0 rows affected)
¿Necesita ayuda? Consulte nuestra guía de solución de problemas o notifique un problema para enviar comentarios específicos.