Siguiendo con el infierno de los Iframes, hoy intentaremos utilizar el control Login de ASP.NET desde la página de un cliente que utiliza nuestra aplicación embebida.
Lo primero que podemos pensar, es en que medida nos puede llegar a afectar trabajar con un iframe con el sistema de login que utilizamos con ASP.NET, para eso tenemos que diferenciar los dos pasos esenciales en la seguridad de nuestras aplicaciones.
Autenticación
La autenticación es el proceso mediante el cual se obtienen credenciales de identificación tales como el nombre de usuario y la contraseña, al tiempo que se validan dichas credenciales ante alguna autoridad.
ASP.NET proporciona cuatro proveedores de autenticación:
• | Autenticación de formularios |
• | Autenticación de Windows |
• | Autenticación Passport |
• | Autenticación predeterminada |
Autorización
La autorización es el proceso que verifica si el usuario autenticado tiene acceso a los recursos solicitados.
ASP.NET proporciona los siguientes proveedores de autorización:
• | FileAuthorization |
• | UrlAuthorization |
Más información en http://support.microsoft.com/kb/306590/es#3
Con esta definición podemos entender que nuestro control login lo que pretende hacer es Autentificar el usuario en nuestra aplicación para poder identificarlo y para eso utilizaremos la Autentificación de Formularios.
Autenticación de Formularios
La autenticación de formularios hace referencia a un sistema en el que la solicitudes no autenticadas se redirigen a un formulario de Lenguaje de marcado de hipertexto (HTML) en el que los usuarios escriben sus credenciales. Una vez que el usuario proporciona las credenciales y envía el formulario, la aplicación autentica la solicitud y el sistema emite un vale de autorización en el formulario de una cookie. Esta cookie contiene las credenciales o una clave para readquirir la identidad. Las solicitudes subsiguientes del explorador automáticamente incluyen la cookie.
Ahora que ya conocemos el mecanismo de autentificación y la manera que tiene para persistir esta información podemos suponer cual será el problema, nuestra aplicación al autentificar al usuario e intentar persistir sus credenciales se encuentra que el dominio que intenta guardar la cookie no es el mismo que esta corriendo la página web, ups ( problema de seguridad – Cross Domain Cookie ).
Miremos como funcionaría la aplicación si no utilizara un Iframe.
- La aplicación nos redirige al formulario de Autentificación.
- Introducimos nuestros datos para identificarnos.
- Si los datos de usuario son correctos nos redirige a la página principal mostrándonos el nombre de usuario
Que pasa cuando hacemos lo mismo desde un iFrame:
- La aplicación nos redirige al formulario de Autentificación.
- Introducimos nuestros datos para identificarnos.
- Como la identificación del usuario ha sido correcto nos redirige a la página principal pero no nos muestra la información del usuario, porque no ha podido guardar la cookie con sus datos.
Para solucionar este problema nos viene a rescatar P3P «un lenguaje estándar que ofrece a los usuarios una forma sencilla y automatizada de controlar en mayor medida el uso que se hace de su información personal en los sitios Web que visitan».
Tenemos dos opciones a la hora de utilizar p3p para poder guardar la cookie de usuario con éxito.
-
Crear una cabecera en nuestro directorio virtual para nuestra aplicación.
-
Crear la cabecera en el formulario de Login para que solo afecte a esa página.
Nosotros utilizaremos la segunda opción.
protected void Page_Load(object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("p3p", "CP="CAO PSA OUR""); }
Ya le podemos decir a nuestro cliente que podemos controlar a los usuarios registrados en nuestra aplicación embebida en su sistema. 😉