El proveedor de almacenamiento de identidad ASP.NET de Couchbase: Parte 1

En Sistema de identidad ASP.NET es una nueva colección de componentes de software para la autenticación en aplicaciones ASP.NET. Proporciona mejoras significativas sobre los anteriores ASP.NET Membership y Simple Membership y pretende facilitar el soporte de almacenes de respaldo no relacionales, como Couchbase Server. Además de la autenticación y la autorización, proporciona un almacén de perfiles, autorización basada en funciones y reclamaciones, compatibilidad con inicios de sesión sociales como Facebook y Twitter y compatibilidad con OWIN... ya no depende del espacio de nombres System.Web.

Couchbase ASP.NET Identity Provider pretende ser un proveedor "completo" que soporte casi todas, si no todas, las características de ASP.NET Identity API. En esta Developer Preview (DP) sólo se ha probado la parte de autenticación; en versiones posteriores se añadirá la autorización basada en roles y reclamaciones, así como la integración con proveedores de medios sociales de terceros a través de Single Sign-On (SSO), además de características como la autenticación de dos factores por SMS y correo electrónico. En este post

le mostraremos cómo integrar el Proveedor de Identidad ASP.NET DP de Couchbase con una Aplicación Web ASP.NET MVC.

Primeros pasos

El paquete está disponible en NuGet o puedes construirlo tú mismo desde el repositorio en Github que se encuentra aquí. Para este blog vamos a utilizar los paquetes publicados a través de NuGet.

Usando Visual Studio 2013 (o quizás 2015), crea una nueva Aplicación Web MVC como sigue:

Puedes ponerle el nombre que quieras; yo lo llamé CouchbaseIdentity. Haz clic en "Aceptar" y selecciona MVC en el siguiente cuadro de diálogo.

Haga clic en "Aceptar" de nuevo y Visual Studio creará el proyecto MVC para usted. Por defecto, Visual Studio utilizará el proveedor de identidad de Entity Framework. Como queremos utilizar el proveedor de identidad de Couchbase, tenemos que eliminar la dependencia del paquete del proveedor de Entity Framework, añadir la referencia al paquete Couchbase Identity y luego reemplazar todas las referencias a using Microsoft.AspNet.Identity.EntityFramework; con Couchbase.AspNet.Identity.

Para cambiar la dependencia del paquete, abra el Gestor de paquetes NuGet y localice el paquete Microsoft ASP.NET Identity EntityFramework y desinstálelo:

En este punto tendrás que reiniciar Visual Studio. A continuación, ve a la pestaña "Online", cambia el menú desplegable a "Include Prerelease" y escribe "couchbase" en el cuadro de texto de búsqueda:

Seleccione Couchbase ASP.NET Identity y haga clic en "Instalar" y "Cerrar" para cerrar el cuadro de diálogo.

Actualización de las dependencias de los paquetes

Ahora que has cambiado los paquetes por defecto del Proveedor de Identidad de Entity Framework y lo has reemplazado por las dependencias y el paquete de Identidad ASP.NET de Couchbase, necesitas actualizar el proyecto para usar el nuevo proveedor.

En primer lugar, sustituya todas las referencias a using Microsoft.AspNet.Identity.EntityFramework; con usando Couchbase.AspNet.Identity;. La forma más fácil de hacerlo es una simple búsqueda y reemplazo (Ctrl F).

A continuación, en IdentityModels.cs, cambia la clase ApplicationDbContext para que derive de ThrowableBucket en lugar de IdentityDbContext y, a continuación, anula el constructor base para que se pase el Bucket que elegiste para almacenar la información de identidad. Yo elegí almacenar mi información de Identidad en el bucket "por defecto"; puedes crear un bucket separado si lo deseas:

Ten en cuenta que "ThrowableBucket" es una envoltura alrededor de algunos métodos CRUD de CouchbaseBucket que cambia ligeramente el comportamiento del SDK; los fallos de operación son lanzados. En futuras versiones, esto puede cambiar.

Por último, abra el archivo Global.asax y añada el código para inicializar el SDK de Couchbase, que utiliza el proveedor de identidad ASP.NET de Couchbase:

El ClusterHelper es una clase de ayuda para el SDK .NET de Couchbase que facilita la gestión de buckets y referencias. Se recomienda inicializar el ClusterHelper en Application_Start y cerrarlo en Application_End. Una vez completado este paso, ¡la aplicación web está lista para usar Couchbase como almacén de respaldo para identidades y perfiles!

¡Probándolo!

Una vez completados los pasos anteriores, puede probar la integración ejecutando la aplicación (botón derecho>debug=>Start new instance) y navegando hasta la página de registro:

Introduzca su dirección de correo electrónico y su contraseña, confírmela y haga clic en "Registrarse".

Suponiendo que todo ha ido bien, debería ser redirigido de nuevo a la página de inicio y debería ver un mensaje "Hola ....". Ya estás autenticado.

Cómo se modela el perfil en Couchbase

El proveedor de identidad por defecto se basa en una serie de tablas relacionales con claves externas que enlazan los datos. El proveedor ASP.NET de Couchbase adopta el enfoque NoSQL y almacena los datos como documentos JSON y utiliza "índices manuales" para los índices secundarios en los casos en que la clave para obtener los datos no es un índice primario.

El documento primario tiene la siguiente estructura:

Se trata de un documento bastante sencillo; en casi todos los casos utilizamos la "incrustación" para almacenar relaciones como Roles y Reclamaciones (las repasaremos en una entrada posterior del blog). Para realizar una búsqueda en un campo de este documento, creamos un segundo documento binario que asocia la dirección de correo electrónico del perfil con la clave primaria (914dc..); esto es similar a un concepto de modelado llamado "referencia".

Podríamos haber utilizado consultas N1QL que harían obsoletos los índices secundarios "manuales", pero la intención es soportar Couchbase Server 3.0 y superiores; N1QL será una característica de Couchbase Server 4.0 que se lanzará a finales de este año.

Cómo conseguirlo:

Couchbase ASP.NET Identity Provider está disponible como paquete en NuGet o puede ser construido directamente desde el código fuente usando el repositorio de Github. Si deseas contribuir, los pull requests son siempre bienvenidos. Si encuentras un bug, puedes crear un ticket en Jira y serás notificado de su estado actual.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Jeff Morris, Ingeniero Superior de Software, Couchbase

Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pasó seis años en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de cómo integrarse con N1QL (lenguaje de consulta).

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.