En esta ocasión platicaré con ustedes un poco de mi experiencia profesional con esta relativamente nueva tecnología. Primero que nada, es importante mencionar que no soy un especialista desarrollador de Identity 2.0, en realidad, lo expuesto en este artículo es la forma en la que llevé a cabo el primer acercamiento con esta herramienta, así que, como muchos, he cometido errores y estoy seguro de seguir cometiéndolos con el pretexto de aprender.

Introducción

Para los que no lo saben, ya está disponible la segunda versión de Identity, lista para ser utilizada mediante la herramienta “Nuget” de su Visual Studio. Microsoft define a Identity como el “sistema diseñado para reemplazar los previos sistemas Membership y Simple Membership. Incluye soporte de perfiles, integración OAuth, trabaja con OWIN y se incluye con los templates de Visual Studio” 1. Esta definición llama la atención de cualquier desarrollador de aplicaciones web, más aún si nos va a ayudar con esa repetitiva historia de todos los proyectos, la autenticación. Después de probar Identity 1.0 y quedar satisfecho con el producto, mi siguiente paso era Identity 2.0 con SqlServer 2014 como motor de base de datos.

Manos a la obra

Después de una pequeña inversión de tiempo, empleada en el estudio de las nuevas opciones que ofrece la actualización y un ejemplo de implementación, el camino fue bastante sencillo, debo decir que mi objetivo no era la implementación simple, mi base de Identity 1.0 me había enseñado que no era complicado configurar una versión a la medida, así que el objetivo era claro, implementar Identity 2.0 con pequeñas modificaciones.

No dedicaré mucho tiempo a detallar cuales son las nuevas características contenidas en la actualización2, todas parecen ser muy útiles y tentadoras, pero algunas de mis favoritas y que estuve usando en el proyecto fueron las siguientes:

    • -Se puede utilizar IdentityFactory con un contexto de Owin: Una de las características que más agradecí fue la utilización del contexto de Owin. “OWIN define una interfaz estándar entre servidores web .Net y aplicaciones web. El objetivo de la interfaz de OWIN es desacoplar el servidor y la aplicación, motivando el desarrollo de módulos simples para el desarrollo web .Net, y, siendo un estándar abierto, estimula el ecosistema de open source para el desarrollo de herramientas web .Net.”3 Mediante el contexto de OWIN me fue posible el manejo de la autenticación de forma simple, eso de batallar con las cookies era cosa del pasado, ahora estaba todo prácticamente resuelto por sí mismo.

 

    • -Hacer que el tipo de dato de la llave primaria sea extendible para usuarios y roles: En la primera versión de Identity existieron algunas quejas al no poder configurar las llaves primarias con el tipo “int”, por ejemplo, luego entonces, una de las primeras actividades que hice en mi implementación fue cambiar el tipo de dato y quedé asombrado cuando noté que funcionaba excelente. Sin dudar, una de las mejores actualizaciones.

 

    • -Validador de password mejorado: Al ver su definición y funcionamiento me fue claro que tenía que probarlo, nunca fue más fácil validar que las contraseñas cumplieran con el formato que yo deseaba, excelente aporte.

 

  • -Entity Framework 6.1.0: Es necesario que las herramientas que ocupas sean estables, pero también nos gustan las cosas nuevas, por lo tanto, esta combinación me es muy agradable para usar.

En general estas opciones para empezar me parecieron suficientes para las necesidades del proyecto que estoy desarrollando, pero la posibilidad de obtener tu autenticación mediante medios externos (que desafortunadamente no pude poner en práctica en el proyecto debido a que es de una institución paraestatal con estricta confidencialidad) es bastante llamativa, así como la autenticación de doble factor, el bloqueo de cuenta, la confirmación de cuenta, entre otras…

En fin… la experiencia iba de maravilla. La implementación, el uso, el reto que fue la adecuación, todo fue muy agradable, excepto cuando un cambio mayor apareció. Por cuestiones ajenas se tuvo que hacer un cambio de paradigma importante en el proyecto, el principal fue el cambio de proveedor de base de datos. Después de pasar una implementación muy agradable con SQL Server llegó Oracle… quiero aclarar que también me gusta ese proveedor de servicios de base de datos y no tengo nada en contra, sino todo lo contrario… pero en algunas ocasiones, cuando las tecnologías no son desarrolladas por la misma empresa, es complicado hacer que trabajen juntas de manera sencilla.

El problema

Yo había escuchado y visto funcionar Entity Framework con Oracle y creí que el cambio podría llegar a ser transparente, sin embargo, no lo fue. Problemas de compatibilidad entre Oracle e Identity 2.0 me hicieron buscar soluciones en Google o experiencias similares, lo único que pude encontrar fue la implementación totalmente customizada y prácticamente cerrada de Identity por medio de ejecuciones de querys construidas en código duro de cada una de las operaciones que se pueden sobrescribir. El hecho de cambiar el tipo de dato de la llave primaria o agregar un campo a la tabla de usuarios había pasado de ser una operación sencilla a un cambio mayor en la implementación customizada.

Desafortunadamente y debido a las necesidades del proyecto respecto a tiempos y tecnologías no pude continuar con esa buena experiencia, pero eso no significa que tú, lector, tengas que seguir por mi camino.

El reto

Yo te invito a ti a implementar las nuevas tecnologías y llevar su desarrollo a su máximo esplendor dentro de tu proyecto, pero no pares en eso, muchas de las nuevas tecnologías ya ofrecen a los desarrolladores las opciones necesarias para crear una implementación a la medida, ve por ellas, indaga en su metodología y construcción y mejórala de acuerdo a tus necesidades. Recuerda, si no estás aprendiendo, no estás mejorando… si no estás mejorando, lo estás haciendo mal.

1 http://www.asp.net/identity/overview/
2 http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx/
3 http://owin.org/