Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Tutorial sobre ASP.NET Identity
Actualizado hace un instante y leído 831 veces
Calificación: 8.67 / 10

Tutorial sobre ASP.NET Identity

Anexsoft

Esta entrada tiene la finalidad de conocer que es ASP.NET Identity ya que, en un comienzo puede parecer confuso, tedioso, por eso quiero guiarlos para tener un mejor panorama y puedan usar ASP.NET Identity en sus proyectos en vez de crear sus métodos de autenticación. Asimismo, he tomado como referencia el siguiente artículo oficial.

 

La finalidad de esta publicación más que codificar es entender los conceptos de este y ver lo que podemos hacer, nos va a servir para aclarar muchas dudas. Ya en el video veremos más la implementación.

 

¿Qué es?

Anteriormente, el sistema de autenticación usado era ASP.NET Membership pero hoy en día ya no se recomienda y ha sido reemplazado por ASP.NET Identity, el cual es una propuesta que permite autenticar ya sea que usemos Web Forms, Web Pages, MVC, API o SignaIR, incluso aplica para Mobile, aplicaciones híbridas, etc. Asimismo, en esta publicación vamos a limitarnos a hablar sobre ASP.NET MVC + ASP.NET Identity.

Los aspectos que conforman ASP.NET Identity son los siguientes:

  • Role Provider: con esta funcionalidad tu puedes muy facilmente gestionar roles para tus usuarios. Por ejemplo, podemos crear un rol Supervisor, Admin, Guest y restringir rápidamente el acceso a ciertas rutas (controladores, acciones) de nuestro proyecto.

  • Claims Based: permite guardar información adicional a nuestra usuario autenticado. Por ejemplo, si usamos la autenticación basada en Cookie, podemos agregar información adicional. Yo suelo usar el Claim UserData y serializo al usuario para guardar toda la información que quiera.

  • Social Login Providers: permite autenticarte usando cuentas externas como Facebook, Twiter, Gmail, etc.

  • OWIN: este es otro concepto muy usado y que genera más confusión. OWIN no es un framework, digamos que es una especificación para crear componentes (middlewares) de esta manera hacemos que los nuevos componentes puedan trabajar bajo un standard y sean compatibles entre si. Digamos que OWIN es lo que es ECMAScript. El punto es que ASP.NET usa componentes OWIN, por ejemplo para el tema de la auntenticación basado en Cookie (OWIN CookieAuthentication), el log-in y log-out.

  • Nugget Package: este es distribuido mediante Nugget, por defecto no viene con el framework. Es una buena opción, porque de esta manera podemos actualizar el ASP.NET Identity cuando salga una nueva versión y dar solución a issues si se encontraran.

 

Comenzando con ASP.NET Identity

Esto se va a entender mejor cuando vean el video adjunto, asi que sigamos con la teoría. Cuando creamos un nuevo proyecto tenemos la opción de elegir el sistema de autenticación, nosotros vamos a elegir Individual User Accounts con ASP.NET MVC, esto creará un proyecto con ASP.NET Identity y toda la configuración que conlleva este ya realizada. Es la mejor forma de comenzar, porque hacerlo desde cero es un más tedioso.

Bien, tenemos 3 packages que son escenciales en ASP.NET Identity:

  • Microsoft.AspNet.Identity.EntityFramework: este permite persistir la información de tus usuarios en una base de datos SQL Server. Es donde vamos a registrar los usuarios, roles, etc.
  • Microsoft.AspNet.Identity.Core: contiene las interfaces para persistir la información en otros lugares que no sean una base de datos SQL Server. Bien podría ser en Azure, NOSql Database.
  • Microsoft.AspNet.Identity.OWIN: lo que mencione parrafos atrás, se encarga de gestionar la autenticación, en nuestro caso implementa la Cookie.

 

Una vez creado nuestro proyecto veremos que hay 2 controladores:

 

AccountController

Este es el encargado de registrar usuarios y log-in/log-out. Por defecto el código ya viene escrito ahorrándonos horas de trabajo.

[Authorize]
    public class AccountController : Controller
    {
        private ApplicationSignInManager _signInManager;
        private ApplicationUserManager _userManager;

        public AccountController()
        {
        }

        public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )
        {
            UserManager = userManager;
            SignInManager = signInManager;
        }
.... 

 

ManagerController

[Authorize]
public class ManageController : Controller
{
    private ApplicationSignInManager _signInManager;
    private ApplicationUserManager _userManager;

    public ManageController()
    {
    }

    public ManageController(
        ApplicationUserManager userManager,
        ApplicationSignInManager signInManager,
    )
    {
        UserManager = userManager;
        SignInManager = signInManager;
...

 

Si se dieron cuenta tenemos referencia a 2 clases: ApplicationSignInManager y ApplicationUserManager. ¿Qué son?, son los business logic para ASP.NET Identity.

  • ApplicationSignInManage: implementa la lógica para autenticarte con el sistema.
  • ApplicationUserManager: implementa la lógica para trabajar con los usuarios, registrar, listar, etc.

Estos 2 son los que viene por defecto, en esta publicación vamos agregar uno adicional para trabajar con los Roles (ApplicationRoleManager).

  • ApplicationRoleManager: este implementa la lógica para crear nuevos roles, listar roles, asignar roles, etc.

 

Creando las clases para los usuarios y roles

Para poder trabajar con ASP.NET Identity debemos ejecutar una migración, dicha migración creara varias tablas. Ahora la pregunta es, como podemos hacer para agregar nuestros propios campos. Bien, para esto debemos crear nuestras clases y hacer que heredende las implementaciones de ASP.NET Identity.

 

ApplicationUser

Esta viene por defecto y lo que hacemos es que herede de IdentityUser

namespace Model.Auth
{
    public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
    }
}

Si quieren agregar nuevas columnas, haganlo a esta clase y luego generen una nueva migración. Veran los cambios realizados.

 

ApplicationRole

Esta será nuestra clase para los roles y debe heredar de IdentityRole.

namespace Model.Auth
{
    public class ApplicationRole : IdentityRole
    {
        
    }
}

Al igual que la clase anterior si especificamos nuevas propiedades será agregar nuevas columnas a nuestras tablas.

 

Modificando nuestro DbContext

Para poder acceder a las tablas de ASP.NET Identity y poder trabajar librement, solo tenemos que cambiar la herencia de nuestro DbContext (luego de buscar mucho, llegué a la conclusión que debe quedar así).

namespace Persistence.DatabaseContext
{
    public class ApplicationDbContext : IdentityDbContext
    {
        public virtual DbSet<Student> Student { get;set; }
        public virtual DbSet<StudentPerCourse> StudentPerCourse { get; set; }
        public virtual DbSet<Course> Course { get; set; }

        public ApplicationDbContext()
            : base(string.Format("name={0}", Parameters.AppContext))
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<ApplicationUser>();
        }
..

Nota:

  • Esta clase es de ejemplo y no hace falta especificar ApplicationUser y ApplicationRole porque estas herededan de IdentityUser y de IdentityRole. Por ende, IdentityDbContext ya las reconoce del caso contrario no lo haría.
  • No se olviden hacer override al OnModelCreating para agregar la clase ApplicationUser. (En este ejemplo solo esta agregado el ApplicationUser).

 

Con esto ya tenemos lo necesario para entender como funciona, en Anexsoft tenemos un Base Project para ASP.NET MVC y este trabaja con ASP.NET Identity, les comparto el GitHub. Asimismo, subiré el video para reforzar y complementar lo aprendido en este artículo.

PD: si estan interesados en crear un proyecto desde cero hay un artículo en Microsoft que les puede ayudar, suerte!.

 

Videos

  1. ASP.NET Identity - Desacoplando Identity en N capas, migración y campos personalizados
    En este tutorial vamos a desacoplar ASP.NET Identity, el cual viene por defecto cuando creamos un nuevo proyecto y especificamos que gestione autenticación.
  2. ASP.NET Identity - Autenticación y guardando los datos que queramos en la cookie (Claims.UserData)
    En este turorial vamos a modificar la autenticación para guardar en la cookie los datos que queramos del usuario. Asimismo, crearemos una clase para obtener al usuario logeado en cualquier momento.

 

¡Adquiera ya!

  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#
  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter

Últimas publicaciones

Encuesta

¿Sobre qué te gustaría que se hable más?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.