Usuarios y roles en el sitio web de producción (C#)
por Scott Mitchell
Nota:
Desde que se escribió este artículo, los proveedores de pertenencia a ASP.NET han sido reemplazados por ASP.NET Identity. Se recomienda encarecidamente actualizar las aplicaciones para usar la plataforma ASP.NET Identity en lugar de los proveedores de pertenencia destacados en el momento en que se escribió este artículo. ASP.NET Identity tiene una serie de ventajas sobre el sistema de pertenencia ASP.NET, incluidas las siguientes:
- Mejor rendimiento
- Extensibilidad y capacidad de prueba mejoradas
- Compatibilidad con OAuth, OpenID Connect y autenticación en dos fases
- Compatibilidad con identidades basadas en notificaciones
- Mejor interoperabilidad con ASP.Net Core
La herramienta de administración de sitios web (WSAT) de ASP.NET proporciona una interfaz de usuario basada en web para configurar la configuración de pertenencia y roles y para crear, editar y eliminar usuarios y roles. Desafortunadamente, el WSAT solo funciona cuando se visita desde localhost, lo que significa que no puede acceder a la herramienta de administración del sitio web de producción a través del explorador. La buena noticia es que hay soluciones alternativas que permiten administrar usuarios y roles en producción. En este tutorial se examinan estas soluciones alternativas y otras más.
Introducción
ASP.NET 2.0 introdujo una serie de servicios de aplicación, que son un conjunto de servicios de bloques de creación que puede agregar a la aplicación web. Agregamos los servicios de pertenencia y roles al sitio web opiniones de libros en el tutorial Configuración de un sitio web que usa servicios de aplicaciones. El servicio de pertenencia facilita la creación y administración de cuentas de usuario; el servicio de roles ofrece una API para clasificar usuarios en grupos. El sitio Book Reviews tiene tres cuentas de usuario: Scott, Jisun y Alice, y un único rol, Admin, con Scott y Jisun en el rol Admin.
Los servicios de aplicación de ASP.NET no están vinculados a una implementación específica. En su lugar, se indica a los servicios de aplicación que usen un proveedor determinado y este implementa el servicio mediante una tecnología determinada. Hemos configurado la aplicación web Opiniones de libros para usar los proveedores de SqlMembershipProvider
y SqlRoleProvider
para los servicios de pertenencia y roles. Estos dos proveedores almacenan información de roles y cuentas de usuario en una base de datos de SQL Server y son los proveedores más usados para las aplicaciones web basadas en Internet hospedadas en una empresa de hospedaje web.
Un desafío común para los desarrolladores que usan los servicios de pertenencia y roles es administrar los usuarios y roles en el entorno de producción. ¿Cómo elimina una cuenta de usuario del sitio web de producción, agrega un nuevo rol o agrega un usuario existente a un rol existente? En este tutorial se exploran diferentes técnicas para administrar usuarios y roles en el sitio web de producción.
Uso de la herramienta de administración de sitios web de ASP.NET
ASP.NET incluye una herramienta de administración de sitios web (WSAT) que facilita la creación y administración de cuentas y roles de usuario y especificar reglas de autorización basadas en roles y usuarios. Para usar WSAT, haga clic en el icono configuración de ASP.NET en el Explorador de soluciones, o vaya al menú Sitio web o Proyecto y elija la opción Configuración de ASP.NET. Cualquier enfoque inicia un explorador web y apunta al WSAT en una dirección como: http://localhost:portNumber/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=pathToApplication
El WSAT se divide en tres secciones:
- Seguridad: administre usuarios, roles y reglas de autorización.
- ApplicationConfiguration: administre la configuración de <appSettings> y SMTP desde aquí. También puede desconectar la aplicación y administrar la configuración de depuración y seguimiento desde aquí, así como especificar la página de error personalizada predeterminada.
- ProviderConfiguration: configure los proveedores usados por los servicios de aplicación.
La sección Seguridad (que se muestra en la ilustración 1) incluye vínculos para crear nuevos usuarios, administrar usuarios, crear y administrar roles y crear y administrar reglas de acceso. Desde aquí puede agregar un nuevo rol al sistema, eliminar un usuario existente o agregar o quitar roles de una cuenta de usuario determinada.
Ilustración 1: la sección de seguridad de WSAT incluye opciones para administrar usuarios y roles
(Haga clic para ver la imagen a tamaño completo.)
Desafortunadamente, el WSAT solo es accesible localmente. No puede visitar el WSAT en su sitio web de producción remota; si visita www.yoursite.com/asp.netwebadminfiles/default.aspx
recibe una respuesta 404 No encontrado. El código que impulsa el WSAT usa las clases Membership
y Roles
en .NET Framework para crear, editar y eliminar usuarios y roles. Estas clases consultan la información de configuración de la aplicación web para determinar qué proveedor utilizar; ya en el tutorial Configurar un sitio web que utiliza servicios de aplicación configuramos el sitio web Book Reviews para utilizar los proveedores SqlMembershipProvider
y SqlRoleProvider
. Esto implicaba agregar secciones <membership>
y <roleManager>
a Web.config
.
<?xml version="1.0"?>
<configuration>
...
<connectionStrings configSource="ConfigSections\databaseConnectionStrings.config" />
<system.web>
...
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="ReviewRole">
<providers>
<clear />
<add type="System.Web.Security.SqlRoleProvider"
name="ReviewRole"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</roleManager>
</system.web>
...
</configuration>
Tenga en cuenta que las secciones <membership>
y <roleManager>
hacen referencia a los proveedores de SqlMembershipProvider
y SqlRoleProvider
en su atributo type
, respectivamente. Estos proveedores almacenan la información de usuario y rol en una base de datos de SQL Server especificada. La base de datos usada por estos proveedores se especifica mediante el atributo connectionStringName
, ReviewsConnectionString
, que se define en el archivo ~/ConfigSections/databaseConnectionStrings.config
. Recuerde que el archivo databaseConnectionStrings.config
del entorno de desarrollo contiene la cadena de conexión a la base de datos de desarrollo, mientras que el archivo databaseConnectionStrings.config
en producción contiene la cadena de conexión a la base de datos de producción.
En pocas palabras, se debe tener acceso localmente al WSAT a través del entorno de desarrollo y funciona con la información de usuario y rol de la base de datos especificada en el archivo databaseConnectionStrings.config
. Por lo tanto, si cambiamos la información de la cadena de conexión en el archivo databaseConnectionStrings.config
en el entorno de desarrollo, podemos usar WSAT localmente para administrar usuarios y roles en el entorno de producción.
Para ilustrar esta funcionalidad, abra el archivo databaseConnectionStrings.config
en Visual Studio en el entorno de desarrollo y reemplace la cadena de conexión de la base de datos de desarrollo por la cadena de conexión de la base de datos de producción. A continuación, inicie el WSAT, vaya a la pestaña Seguridad y agregue un nuevo usuario llamado Sam con contraseña "contraseña!" (menos las comillas). La ilustración 2 muestra la pantalla WSAT al crear esta cuenta.
Ilustración 2: crear un nuevo usuario denominado Sam en el entorno de producción
(Haga clic para ver la imagen a tamaño completo.)
Dado que hemos cambiado la cadena de conexión en databaseConnectionStrings.config
para que apunte al servidor de bases de datos de producción, Sam se agregó como usuario en el entorno de producción. Para comprobarlo, cambie la cadena de conexión del archivo databaseConnectionStrings.config
a la base de datos de desarrollo y, a continuación, visite la página Login.aspx
en el entorno de desarrollo. Intente iniciar sesión como Sam (consulte la ilustración 3).
Ilustración 3: no se puede iniciar sesión como Sam en el entorno de desarrollo
(Haga clic para ver la imagen a tamaño completo.)
No puede iniciar sesión como Sam en el entorno de desarrollo porque la información de la cuenta de usuario no existe en la base de datos local. En su lugar, se agregó a la base de datos de producción. Para comprobarlo, vea el contenido de la tabla aspnet_Users
en las bases de datos de desarrollo y producción. En el entorno de desarrollo solo debe haber tres registros para los usuarios Scott, Jisun y Alice. Sin embargo, la tabla aspnet_Users
de la base de datos de producción tiene cuatro registros: Scott, Jisun, Alice y Sam. Por lo tanto, Sam puede iniciar sesión a través del sitio web en producción, pero no a través del entorno de desarrollo.
Ilustración 4: Sam puede iniciar sesión en el sitio web de producción
(Haga clic para ver la imagen a tamaño completo.)
Nota:
No olvide cambiar la cadena de conexión en el archivo databaseConnectionStrings.config
a la cadena de conexión de la base de datos de desarrollo cuando haya terminado de trabajar con WSAT; de lo contrario, trabajará con datos de producción al probar el sitio a través del entorno de desarrollo. Tenga en cuenta también que, aunque la técnica que acabamos de analizar nos permite usar el WSAT para administrar de forma remota usuarios y roles, los cambios en cualquiera de las otras opciones de configuración de WSAT (reglas de acceso, configuración SMTP, configuración de depuración y seguimiento, etc.) modificar el archivo Web.config
. Por lo tanto, los cambios realizados en la configuración se aplican al entorno de desarrollo y no al entorno de producción.
Creación de páginas web de administración de roles y usuarios personalizados
WSAT proporciona un sistema estándar para administrar usuarios y roles, pero solo se puede iniciar localmente y requiere realizar cambios en la información de la cadena de conexión para administrar los usuarios y roles en producción. La mayoría de los sitios web que admiten cuentas de usuario también incluyen una serie de páginas web de administración de usuarios y roles que permiten a los administradores administrar usuarios y roles desde páginas dentro del sitio. Estas páginas de administración basadas en web facilitan mucho la administración de usuarios y roles y son esenciales para los sitios en los que puede haber muchos administradores o administradores que no tengan acceso a o al fondo técnico para usar Visual Studio para iniciar el WSAT.
ASP.NET incluye una serie de controles web integrados relacionados con el inicio de sesión que hacen que la implementación de muchas de estas páginas web administrativas sea tan fácil como arrastrar y colocar. Por ejemplo, puede crear una página para que los administradores creen una nueva cuenta de usuario arrastrando el control CreateUserWizard a la página y estableciendo algunas propiedades. De hecho, la página para crear usuarios en el WSAT que se muestra en la ilustración 2 usa el mismo control CreateUserWizard que puede agregar a las páginas. Además, las funcionalidades de los servicios de pertenencia y roles están disponibles mediante programación a través de las clases Membership
y Roles
de .NET Framework. Con estas clases puede escribir código para crear, editar y eliminar usuarios y roles, así como para agregar o quitar usuarios a roles, para determinar qué usuarios están en qué roles y para realizar otras tareas relacionadas con el usuario y el rol.
En el tutorial Configuración de un sitio web que usa servicios de aplicaciones he agregado una página a la carpeta Admin
denominada CreateAccount.aspx
. Esta página permite a un administrador agregar una nueva cuenta de usuario al sitio y especificar si el usuario recién creado está en el rol Administrador (vea la ilustración 5).
Ilustración 5: los administradores pueden crear nuevas cuentas de usuario
(Haga clic para ver la imagen a tamaño completo.)
Para obtener información más detallada sobre la creación de páginas de administración de usuarios y funciones, junto con instrucciones paso a paso sobre el uso de las clases Membership
y Roles
y los controles web ASP.NET relacionados con el inicio de sesión, asegúrese de leer mis Tutoriales de seguridad de sitios web. Allí encontrará instrucciones sobre cómo crear páginas web para crear nuevas cuentas, crear y administrar roles, asignar usuarios a roles y otras tareas administrativas comunes.
Para implementar la funcionalidad similar a WSAT en el sitio web de producción, siempre puede crear su propia serie de páginas web que implementen las características de WSAT. Para ayudarle a empezar, consulte el código fuente de WSAT, que se encuentra en la carpeta %WINDIR%\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles
. Otra opción es usar la alternativa WSAT de Dan Clem, que comparte en su artículo Rolling Your Own Web Site Administration Tool. Dan guía a los lectores a través del proceso de creación de una herramienta personalizada de tipo WSAT, incluye el código fuente de su aplicación para su descarga (en C#) y proporciona instrucciones paso a paso para agregar su WSAT personalizado a un sitio web hospedado.
Resumen
La herramienta de administración de sitios web (WSAT) de ASP.NET se puede usar junto con los servicios de aplicación De pertenencia y roles para administrar la información de usuario y rol del sitio web. Desafortunadamente, el WSAT solo es accesible localmente y no se puede visitar desde su sitio web de producción. Sin embargo, al cambiar la cadena de conexión en el entorno de desarrollo para que apunte a la base de datos de producción, puede usar WSAT para administrar los usuarios y roles en el sitio web de producción.
Aunque el enfoque WSAT ofrece una manera rápida y sencilla de administrar usuarios y roles, requiere iniciar el WSAT desde Visual Studio, así como cambios temporales en la información de la cadena de conexión. WSAT ofrece una manera rápida de administrar usuarios y roles en producción, pero es complicado y no funciona bien para sitios web con varios administradores o con administradores que no tienen o no están familiarizados con Visual Studio y WSAT. Por estas razones, la mayoría de los sitios web que admiten cuentas de usuario incluyen un conjunto de páginas web administrativas. Este conjunto de páginas web elimina la necesidad de WSAT y los usa varios usuarios administrativos de cualquier equipo.
¡Feliz programación!
Lecturas adicionales
Para obtener más información sobre los temas tratados en este tutorial, consulte los siguientes recursos:
- Examinar ASP. Pertenencia, roles y perfil de NET
- Poner en marcha su propia herramienta de administración de sitios web
- Información general sobre la herramienta de administración de sitios web
- Tutoriales de seguridad del sitio web