Introducción
La versión 2.0 de ASP.NET implementa un sistema de membresía mediante el cual es posible administrar y almacenar datos de usuarios, datos como nombre de usuario y password (Credenciales), funciones (Roles). Para poder hacer uso de ello, ASP.NET 2.0 nos ofrece una serie de clases para la utilización de dicha información. Decir también que ASP.NET, en esta versión 2.0, trae consigo la autenticación de formularios, por el cual podremos dar acceso a partes de nuestra aplicación web a usuarios logueados o usuarios logueados que pertenezcan a un determinado Rol (Administrador).
Sistema de membersía (MemberShip) y clases
El sistema de membresía está basado en un almacén de datos que permite albergar datos como usuarios, credenciales, nombre de usuarios y contraseñas, Roles, Profiles, preferencias de cada usuario en la aplicación web y otros datos necesarios. ASP.NET 2.0 ofrece soporte para distintos almacenes de datos, como son SQL Server o Active Directory. Nosotros nos centraremos en SQL Server y cómo configurar nuestros propios perfiles de proveedores personalizados, para añadir soporte a otros almacenes.
Para ello .NET Framework 2.0 nos ofrece una serie de clases para poder manejar la información de miembros, roles y perfiles. Estas clases son:
- SQLMemberShipProvider (Para la gestión de miembros): Permite gestionar la información de los miembros en una aplicación ASP.NET con SQL Server como servidor de base de datos.
- SQLRoleProvider (Para la gestión de roles): Permite gestionar la información de los roles de miembros en una aplicación ASP.NET con SQL Server como servidor de base de datos.
- SQLProfilesProvider (Para la gestión de perfiles): Permite gestionar la información de los perfiles en una aplicación ASP.NET con SQL Server como servidor de base de datos.
Donde mejor puede ver un ejemplo es en el archivo machine.config alojado en el carpeta C:WINDOWSMicrosoft.NETFramework2.0.****CONFIG (**** corresponde a la versión que tengas instalado del Framework, lo normal que sea 2.0.50727), y ver como están configurados dichos proveedores, abajo pongo como estaría configurado el proveedor por defecto llamado «AspNetSqlMembershipProvider»:
<membership>
<providers>
<add name=«AspNetSqlMembershipProvider«
type=«System.Web.Security.SqlMembershipProvider,
System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a«
connectionStringName=«LocalSqlServer«
enablePasswordRetrieval=«false«
enablePasswordReset=«true«
requiresQuestionAndAnswer=«true«
applicationName=«/«
requiresUniqueEmail=«false«
passwordFormat=«Hashed«
maxInvalidPasswordAttempts=«5«
minRequiredPasswordLength=«7«
minRequiredNonalphanumericCharacters=«1«
passwordAttemptWindow=«10«
passwordStrengthRegularExpression=«» />
</providers>
</membership>
<profile>
<providers>
<add name=«AspNetSqlProfileProvider»
connectionStringName=«LocalSqlServer»
applicationName=«/»
type=«System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a» />
</providers>
</profile>
<roleManager>
<providers>
<add name=«AspNetSqlRoleProvider»
connectionStringName=»LocalSqlServer»
applicationName=»/»
type=»System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a» />
<add name=«AspNetWindowsTokenRoleProvider»
applicationName=»/»
type=»System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a» />
</providers>
</roleManager>
Este proveedor se conecta con una instancia del SQL Server Express, y como se puede apreciar es importante la propiedad name donde se define el nombre de la cadena de conexión, en está cadena «LocalSqlServer», si observamos de nuevo los proveedores anteriores todos tienen en comun una propiedad connectionStringName, cuyo valor corresponde con el valor del nombre de la conexión, ¡E ahí la cuestion! jejeje… Fundamental este punto
<
connectionStrings>
<
add name=«LocalSqlServer«
connectionString=«data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true«
providerName=«System.Data.SqlClient« />
</connectionStrings>
Destacar también en la cadena de conexión «…aspnetdb.mdf…». Este archivo al que hace referencia dicha cadena es la base de datos donde se almacena toda la información y referencia antes nombrado (Usuarios, Profiles, Roles, etc).
La configuración Web de ASP.NET
Visual Studio 2005 incorpora una herramienta llamada Configuración de ASP.NET la cual permite de forma sencilla administrar y crear la base de datos ASPNETDB.MDF. ¿Como podemos acceder a esta herramienta?
Muy sencillo, si tienes un proyecto ya creado o si no lo ha creado aun, ejecuta Visual Studio, vaya a Archivos > Nuevo > Sitio Web, dale un nombre al proyecto y aceptamos. Para entrar en dicho configurador, se puede acceder de dos formas diferentes, una sería en la barra de menus Sitio Web > Configuración de ASP.NET o desde el explorador de soluciones, como se muestra en la image siguiente.
Tras pulsar sobre dicho botón se levantara una página de configuración de ASP.NET, tal como se muestra en la imagen siguiente.
Como puede observar, dicha herramienta se divide en tres zonas bien diferenciadas que describo a continuación:
- Seguridad
Cuando creamos una aplicación web nos interesa que tenga una cierta seguridad en toda la aplicación o en zonas concretas de esta ya que tenemos una serie de recursos que deseamos proteger y solo sean accesibles por tipo de usuario especificado. ASP.NET utiliza un sistema de seguridad que le permite restringir el acceso a cuentas de usuario específicas o a las funciones (Roles) a las que pertenecen las cuentas de usuario. Con la ficha Seguridad, puede administrar cuentas de usuario, funciones y reglas de acceso para el sitio Web. Antes de utilizar la ficha Seguridad por primera vez, utilice el Asistente para la configuración de seguridad para configuraciones de seguridad básicas para el sitio Web.
- Aplicación
Esta zona se utiliza para administrar los valores de configuración del sitio y la aplicación Web utilizados con frecuencia.
Utilizar la ficha Aplicación para administrar lo siguiente:
- Pares nombre/valor de la configuración de la aplicación.
La configuración de la aplicación consiste en pares nombre/valor que representan el texto de los valores configurables en la aplicación Web. Utilizar las configuraciones de la aplicación para almacenar la información de configuración personalizada, como las rutas de acceso a archivos, las direcciones URL del servicio Web XML, normalmente utilizada como texto, o cualquier información que desee mantener en una ubicación central y que pueda cambiar con facilidad.
Importante La configuración de la aplicación se almacena en el archivo como texto sin formato. Por lo tanto, debe tomar las medidas de seguridad apropiadas cuando utilice la configuración de la aplicación. No almacene información confidencial como nombres de usuario, contraseñas o cadenas de conexión de la base de datos en la configuración de la aplicación.
- Configuración del Protocolo simple de transferencia de correo (SMTP).
Si el sitio Web requiere la capacidad de enviar un correo electrónico (por ejemplo, para enviar una contraseña a los usuarios), debe especificar el servidor SMTP que utiliza su sitio.
- Estado de la aplicación.
Puede poner su aplicación fuera de conexión (apagarla) para realizar el mantenimiento o poner en conexión una base de datos nueva de Microsoft SQL Server Express.
- Depuración y seguimiento.
La depuración y el seguimiento le permiten diagnosticar y corregir problemas con la aplicación Web, con la intención de utilizarlos durante el desarrollo. Al permitir la depuración, las páginas del sitio Web se compilan con información que los depuradores de .NET Framework o de Microsoft Visual Studio pueden utilizar para recorrer su código. Al permitir el seguimiento se genera información acerca de solicitudes Web individuales, encabezados HTTP que se envían con las solicitudes, el estado de los controles de la página y otros detalles acerca del procesamiento de páginas.
- Proveedor
La zona Proveedor sirve para administrar el modo en que ASP.NET almacena datos para las características de la aplicación, como cuentas de usuario, funciones y otros valores de configuración.
ASP.NET utiliza clases de proveedores para administrar el almacenamiento de los datos para varias características, como la administración de suscripciones y de funciones. Una clase de proveedor es un componente que expone una funcionalidad ASP.NET específica, como la administración de la suscripción de las cuentas de usuario. Todas estas características de la aplicación requieren el almacenamiento de los datos. Aunque todas las clases de proveedores realizan las mismas características de la aplicación, cada proveedor puede almacenar datos de un modo distinto. Por ejemplo, las distintas clases de proveedor para la suscripción de ASP.NET pueden almacenar información de la cuenta de usuario de los siguientes modos:
- En una base de datos de Microsoft SQL Server.
- En el servicio del directorio Microsoft Windows Active Directory.
- En una base de datos de usuario personalizada.
Todas estas clases de proveedor realizan el mismo grupo de tareas principales para administrar cuentas de usuario y usted interactúa con las clases de proveedor de su aplicación del mismo modo.
Recomiendo que antes de entrar de lleno en la aplicación de configuración de ASP.NET se compienze por el asistente, este se encuentra dentro de la ficha de seguridad y entraríamos en una serie de pasos, 7 para ser exactos, pasando desde el metodo de acceso (Windows o Formulario), configuración del proveedor, Definición de Roles (funciones), por ejemplo, es muy habitual tener alguien que administre nuestra aplicación web por lo que se suele crear el rol «Administrador», agregar usuarios y definición de reglas de acceso, aquí es donde se decide donde o que zonas están permitidas para unos usuarios concretos y cuales no.
Hasta aquí todo bien, ahora si cerramos el configurador de ASP.NET, y nos vamos al explorador de soluciones y refrescamos veremos aparecer en la carpeta App_Data el archivo ASPNETDB.MDF, es la base de datos que alojará todos nuestros futuros usuarios, nuestros roles o funciones, personalización de la aplicación de cada usuario, etc. También podemos crear una base de datos o utilizar otra base de datos que haga la misma función, pero esto lo comentaré en un proximo artículo donde entraré en más detalle.
Ya con todo esto, podemos hacer uso de los controles de Login, CreateUser, LoginView, etc.
Espero que os haya servido de ayuda este artículo. Proximamente pondré la segunda parte de Membresía. Hasta pronto!!
Que tal Paco
Bueno estoy empezando con esto de ASP.Net y de la autentificacion de usuarios ya logre autentificar
y acceder a una pagina que requiere de estar autentificado, ahora lo que no me queda muy claro son los roles pues tengo entendido que se puede restringir el acceso a este nivel y me he creado dos carpetas y que dependiendo del rol del usuario me permita acceder, pero no lo he logrado. Alguna sugerencia de lo que debo hacer
Saludos