Autenticar a los usuarios con la autenticación de formularios (C#)

por Microsoft

Obtenga información sobre cómo usar el atributo [Authorize] para proteger con contraseña páginas concretas en la aplicación MVC. Aprenderá a usar la herramienta Administración de sitios Web para crear y administrar usuarios y roles. También aprenderá a configurar dónde se almacena la cuenta de usuario y la información sobre los roles.

El objetivo de este tutorial es explicar cómo puede usar la autenticación de formularios para proteger con contraseña las vistas de las aplicaciones MVC de ASP.NET MVC. Aprenderá a usar la herramienta Administración de sitios Web para crear usuarios y roles. También aprenderá a evitar que usuarios no autorizados invoquen acciones del controlador. Por último, aprenderá a configurar dónde se almacenan los nombres de usuario y las contraseñas.

Uso de la herramienta Administración de sitios Web

Antes de hacer cualquier otra cosa, deberíamos empezar por crear algunos usuarios y roles. La forma más fácil de crear usuarios y roles es utilizar la herramienta Administración de sitios web de Visual Studio 2008. Para iniciar esta herramienta, seleccione la opción de menú Proyecto, Configuración de ASP.NET. Como alternativa, la herramienta Administración de sitios Web puede iniciar haciendo clic en el icono del martillo que golpea el mundo que aparece en la parte superior de la ventana Explorador de soluciones (vea la figura 1).

Figura 1: Inicio de la herramienta Administración de sitios Web

clip_image002

En la herramienta Administración de sitios web, se crean usuarios y roles desde la pestaña Seguridad. Haga clic en el vínculo Crear usuario para crear un usuario llamado Stephen (vea la figura 2). Asigne al usuario Stephen la contraseña que desee (por ejemplo, secret).

Figura 2: Creación de un usuario

clip_image004

Para crear roles, primero deben habilitarse los roles y, después, deben definir uno o varios roles. Para habilitar roles, haga clic en el vínculo Habilitar roles. Luego, cree un rol denominado Administradores haciendo clic en el vínculo Crear o administrar roles (vea la figura 3).

Figura 3: Creación de un rol

clip_image006

Por último, cree un usuario llamado Sally y asócielo al rol Administradores haciendo clic en el vínculo Crear usuario y seleccionando Administradores al crear Sally (vea la figura 4).

Figura 4: Agregar un usuario a un rol

clip_image008

Debería tener dos nuevos usuarios llamados Stephen y Sally. También debe tener un nuevo rol denominado Administradores. Sally es miembro del rol de Administradores, pero Stephen no lo es.

Requerir autorización

Para requerir que los usuarios se autentiquen antes de invocar cualquier acción del controlador, agregue el atributo [Authorize] a la acción. El atributo [Authorize] se puede aplicar a una acción de controlador individual, o bien a toda una clase de controlador.

Por ejemplo, el controlador de la lista 1 expone una acción denominada CompanySecrets(). Dado que esta acción tiene el atributo [Authorize], esta acción no se puede invocar, a menos que se autentique un usuario.

Lista 1: Controllers\HomeController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        
        [Authorize]
        public ActionResult CompanySecrets()
        {
            return View();
        }
    }
}

Si invoca la acción CompanySecrets() escribiendo la dirección URL /Home/CompanySecrets en la barra de direcciones del explorador y no es un usuario autenticado, se le redirigirá automáticamente a la vista Inicio de sesión (vea la figura 5).

Figura 5: Vista Inicio de sesión

clip_image010

La vista Inicio de sesión se usar para especificar el nombre de usuario y la contraseña. Si no es un usuario registrado, puede hacer clic en el vínculo Registrar para ir a la vista Registrar (vea la figura 6). La vista Registrar se usa para crear una cuentas de usuario.

Figura 6: Vista Registrar

clip_image012

Tras iniciar sesión, puede acceder a la vista CompanySecrets (vea la figura 7). De forma predeterminada, seguirá con la sesión iniciada hasta que cierre la ventana del explorador.

Figura 7: La vista CompanySecrets

clip_image014

Autorización por nombre de usuario o rol de usuario

Puede usar el atributo [Authorize] para restringir el acceso a una acción del controlador a un conjunto determinado de usuarios o a un conjunto determinado de roles de usuario. Por ejemplo, el controlador Home modificado en la lista 2 contiene dos nuevas acciones denominadas StephenSecrets() y AdministratorSecrets().

Lista 2: Controllers\HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        
        [Authorize]
        public ActionResult CompanySecrets()
        {
            return View();
        }


        [Authorize(Users="Stephen")]
        public ActionResult StephenSecrets()
        {
            return View();
        }


        [Authorize(Roles = "Administrators")]
        public ActionResult AdministratorSecrets()
        {
            return View();
        }

    }
}

El usuario con el nombre de usuario Stephen es el único que puede invocar la acción StephenSecrets(). Todos los demás usuarios se redirigen a la vista Inicio de sesión. La propiedad Users acepta una lista separada por comas de nombres de cuentas de usuario.

Los usuarios del rol Administradores son los únicos que pueden invocar la acción AdministratorSecrets(). Por ejemplo, como Sally pertenece al grupo Administradores, puede invocar la acción AdministratorSecrets(). Todos los demás usuarios se redirigen a la vista Inicio de sesión. La propiedad Roles acepta una lista separada por comas de nombres de roles.

Configuración de la autenticación

En este momento, es posible que se pregunte dónde se almacenan la cuenta de usuario y la información del rol. De forma predeterminada, la información se almacena en una base de datos (RANU) SQL Express denominada ASPNETDB.mdf, que se encuentra en la carpeta App_Data de la aplicación MVC. El marco de trabajo de ASP.NET genera esta base de datos automáticamente al empezar a usar la pertenencia.

Para ver la base de datos ASPNETDB.mdf en la ventana de Explorador de soluciones, primero debe seleccionar la opción de menú Proyecto, Mostrar todos los archivos.

El uso de la base de datos SQL Express predeterminada es correcto al desarrollar una aplicación. Sin embargo, lo más probable es que no quiera usar la base de datos ASPNETDB.mdf predeterminada para una aplicación de producción. En ese caso, puede cambiar al lugar en que se almacena la información de la cuenta de usuario, para lo que debe realizar los dos pasos siguientes:

  1. Agregar los objetos de base de datos de Application Services a su base de datos de producción: cambie la cadena de conexión de la aplicación para que apunte a su base de datos de producción

El primer paso es agregar todos los objetos de base de datos necesarios (tablas y procedimientos almacenados) a la base de datos de producción. La forma más fácil de agregar estos objetos a una base de datos nuevas es aprovechar las ventajas del Asistente para instalación de SQL Server ASP.NET (vea la figura 8). Para iniciar esta herramienta, abra el símbolo del sistema de Visual Studio 2008 desde el grupo de programas de Microsoft Visual Studio 2008 y ejecute el siguiente comando desde el símbolo del sistema:

aspnet_regsql

Figura 8: Asistente para instalación de SQL Server de ASP.NET

clip_image016

El Asistente para instalación de SQL Server de ASP.NET permite seleccionar una base de datos de SQL Server en la red e instalar todos los objetos de base de datos que necesitan los servicios de aplicación de ASP.NET. No es necesario que el servidor de base de datos se encuentre en la máquina local.

Nota:

Si no desea usar el Asistente para instalación de SQL Server de ASP.NET, puede encontrar scripts SQL para agregar los objetos de base de datos de servicios de aplicaciones en la siguiente carpeta:

C:\Windows\Microsoft.NET\Framework\v2.0.50727

Después de crear los objetos de base de datos necesarios, debe modificar la conexión de base de datos que usa la aplicación MVC. Modifique el cadena de conexión ApplicationServices en el archivo de configuración web (web.config) para que apunte a la base de datos de producción. Por ejemplo, la conexión modificada de la lista 3 apunta a una base de datos llamada MyProductionDB (la cadena de conexión original de ApplicationServices se ha marcado como comentario).

Lista 3: Web.config

<connectionStrings>
    <!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
  <add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>

Configuración de permisos de base de datos

Si usa Seguridad integrada para conectarse a una base de datos, deberá agregar la cuenta de usuario de Windows correcta como inicio de sesión en la base de datos. La cuenta correcta depende de si se usa el Servidor de desarrollo de ASP.NET o Internet Information Services como servidor web. La cuenta de usuario correcta también depende del sistema operativo.

Si usa el servidor de desarrollo de ASP.NET (el servidor web predeterminado usado por Visual Studio), la aplicación se ejecuta dentro del contexto de la cuenta de usuario de Windows. En ese caso, debe agregar la cuenta de usuario de Windows como inicio de sesión del servidor de base de datos.

Como alternativa, si usa Internet Information Services, necesita agregar la cuenta de ASPNET o la cuenta de NT AUTHORITY/NETWORK SERVICE como inicio de sesión del servidor de base de datos. Si usa Windows XP, agregue la cuenta de ASPNET como inicio de sesión a la base de datos. Si usa un sistema operativo más reciente, como Windows Vista o Windows Server 2008, agregue la cuenta NT AUTHORITY/NETWORK SERVICE como inicio de sesión de base de datos.

Para agregar una nueva cuenta de usuario a su base de datos, utilice Microsoft SQL Server Management Studio (consulte la figura 9).

Figura 9: Creación de un inicio de sesión de Microsoft SQL Server

clip_image018

Después de crear el inicio de sesión necesario, debe asignar el inicio de sesión a un usuario de la base de datos con los roles de base de datos adecuados. Haga doble clic en el inicio de sesión y seleccione la pestaña Asignación de usuario. Seleccione un rol de base de datos (o varios) del servicio de aplicación. Por ejemplo, para autenticar a los usuarios, debe habilitar el rol de base de datos aspnet_Membership_BasicAccess. Para crear usuarios, debe habilitar el rol de base de datos aspnet_Membership_FullAccess (vea la figura 10).

Figura 10: Adición de roles de base de datos de servicios de la aplicación

clip_image020

Resumen

En este tutorial, ha aprendido a usar la autenticación de formularios al compilar una aplicación de ASP.NET MVC. En primer lugar, ha aprendido a crear usuarios y roles con la herramienta de Administración de sitios Web. Luego, ha aprendido a usar el atributo [Authorize] para evitar que usuarios no autorizados invoquen acciones del controlador. Y, por último, ha aprendido a configurar la aplicación MVC para almacenar información de usuario y rol en una base de datos de producción.