Tutorial de ASP.NET
Vista Previa de ASP.NET 2.0

Autenticación Basada en Formularios

La autenticación basada en formularios es un servicio de autenticación de ASP .NET que permite a las aplicaciones proporcionar su propia Interfaz de Usuario para el inicio de sesión y hacer su propia verificación de credenciales. ASP .NET autentica usuarios, redirecciona uusarios no autenticados a la página de inicio de sesión y ejecuta toda la administración de cookies necesaria. Este tipo de autenticación es una técnica muy popular usada en muchos sitios web.

Para que una aplicación utilice autenticación basada en formularios, tendremos que fijar el valor de  <authentication> a Forms, y denegar el acceso a usuarios anónimos. El siguiente ejemplo muestra como puede realizarse esto en el fichero Web.config para la aplicación deseada:

<configuration>
  <system.web>
    <authentication mode="Forms"/>
    <authorization>
        <deny users="?" />
    </authorization>
  </system.web>
</configuration>

Los administradores usremos la autenticación basada en formularios para configurar el nombre de la cookie a utilizar, el tipo de protección, la URL de la página de login, tiempo de vida de la cookie y la ruta a utilizar para la cookie emitida. La siguiente tabla muestra los atributos válidos para los elementos <Forms>, el cual es un subelemento de <authentication>, mostrado en el siguiente ejemplo:

<authentication mode="Forms">
<forms name=".ASPXCOOKIEDEMO" loginUrl="login.aspx" defaultUrl="default.aspx"
protection="All" timeout="30" path="/" requireSSL="false"
slidingExpiration="true" enableCrossAppRedirects="false"
cookieless="UseDeviceProfile" domain="">
<!-- protection="[All|None|Encryption|Validation]" -->
<!-- cookieless="[UseUri | UseCookies | AutoDetect | UseDeviceProfile]" -->
</forms>
</authentication>



Atributo         Descripción
cookieless Los formularios de autenticación de ASP.NET 2.0 pueden almacenar los tickets de autenticación de los formularios con o sin la representación en la URL de una cookie. El valor por defecto de UseDeviceProfile indica que ASP .NET determina dónde almacenar el ticket basado en el perfil del navegador pre-calculado. La opción de AutoDetect hace que ASP.NET determine dinámicamente si el navegador soporta cookies o no. UseUri y UseCookies fuerza el uso de tickets sin y con cookies, respectivemente.
defaultUrl Especifica la URL por defecto a la que la petición es redireccionada después de un ingreso válido. Este valor se usa si no existe una URL de redirección en la Autenticación por Formularios.
domain Especifica el valor de la propiedad Domain en la HttpCookie que contiene los tickets del formulario de autenticación. Configurar este atributo explícitamente permite a las aplicaciones compartir la misma cookie siempre que las aplicaciones compartan una porción común de un espacio de nombres de DNS (ej: appA.contoso.com y appB.contoso.com podrían compartir una cookie si el domain attribute tiene el valor "contoso.com").
enableCrossAppRedirects Los formularios de autenticación de ASP.NET 2.0 permiten enviar los tickets de autenticación del formulario entre aplicaciones tanto en una variable cadena-petición como en una variable POST de formulario. Poner este atributo a true permite al FormsAuthenticationModule extraer el ticket tanto de una cadena-petición como de una variable POST de formulario.
loginUrl Especifica la URL a la cual la petición es redireccionada para usuarios no autenticados. Esta puede estar en la misma máquina o una remota. Si está en una remota, ambas máquinas necesitan estar usando el mismo valor para los atributos decryptionkey y validationKey que se encuentran en el elemento de configuración machineKey.
name Nombre de la cookie HTTP a usar para propósitos de autenticación. Observad que si más de una aplicación quiere usar servicios de autenticación basados en formularios en una sóla máquina, y cada aplicación quiere que la cookie del formulario de autenticación sea exclusiva para la aplicación, entonces cada una debería configurar un único valor de cookie. Para evitar causar dependencias en las URLs, ASP .NET también usa “/” como valor de Path cuando configura cookies de autenticación, de modo que son devueltas a cada aplicación en el sitio web.
path Path o ruta que usa la cookie emitida. El valor por defecto es “/” para evitar dificultades en caso de ausencia de path, debido a que los navegadores distinguen entre mayúsculas y minúsculas cuando devuelven las cookies. Las aplicaciones en un entorno de servidor compartido deberían usar estas directivas para mantener las cookies privadas. (Alternativamente, pueden especificar el path en tiempo de ejecución utilizando APIs para la cookie emitida).
protection

Método usado para proteger los datos de las cookies. Los valores permitidos son los siguientes:

  • All: Usa tanto validación como encriptación para proteger la cookie. El algoritmo validación de datos está basado en el elemento <machinekey>. Se usa AES por defecto para la encriptación, y si la clave es suficientemente larga (48 caracteres). All es el valor por defecto (y aconsejado).
  •  None: Se usa para sitios que solo usan cookies para la personalización y tienen requerimientos de seguridad poco estrictos. Tanto la encriptación como la validación se pueden desactivar. Aunque se deberiamos tener cuidado si usamos las cookies de este modo, esta configuración proporciona las mejores prestaciones de cualquier método de personalización usando el Framework de .NET.
  • Encryption: Encripta la cookie utilizando AES, TripleDES o DES, pero no se realiza una validación sobre la cookie. Este tipo de coolie puede estar sujeta a determinados ataques “choose plaintext”.
  • Validation: No encripta  los contenidos de la cookie, pero valida el que los datos de la cookie no hayan sido alterados durante el trayecto. Para crear la cookie, la clave de validación es concatenada en un buffer con los datos de la cookie y una MAC es calculada y añadida a la cookie de salida.
requireSSL Si el valor está a true, la Autenticación por Formularios configura el bit de seguridad en la cookie del formulario de autenticación. Los navegadores “conformistas” sólo devolverán la cookie a ASP .NET a través de una conexion SSL. Observad que esta configuración no tiene efecto en formularios de autenticación sin cookies.
slidingExpiration Si el valor está a true, los Formularios de Autenticación actualizarán periódicamente el tiempo de vida para los tickets del formuario de autenticación. Esto ocurre independientemente de si el ticket está o no contenido en una cookie, o en los formatos sin cookie en la URL.
timeout Cantidad de tiempo en minutes enteros, después del cual la cookie expira. El valor por defecto es 30. El atributo timeout es un variable, que expira a los n minutos de haber recibido la última petición. Para evitar prestaciones que nos afecten negativamente o múltiples avisos del navegador (para aquellos que tengan los avisos de cookier activados), la cookie se actualiza si el tiempo transcurrido es más de la mitad del valor configurado. (Esto puede conllevar una pérdida de precision en algunos casos).

Después de que la aplicación haya sido configurada, necesitamos proporcionar una página de registro. El siguiente ejemplo muestra una sencilla página de registro. Cuando se ejecuta el ejemplo, solicita la página Default.aspx. Las peticiones no autenticadas se redireccionan a la página de registro (Login.aspx), qué presenta un sencillo formulario solicitando una dirección de correo electrónico y un password. (Como credenciales utiliza Username=”someone@www.contoso.com” and Password=”password”).

Después de validar las credenciales, la aplicación realiza la siguiente llamada: