Iframe Cross Domain Cookie

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.




  1. La aplicación nos redirige al formulario de Autentificación.
  2. Introducimos nuestros datos para identificarnos.
  3. 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:




  1. La aplicación nos redirige al formulario de Autentificación.
  2. Introducimos nuestros datos para identificarnos.
  3. 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.




  1. Crear una cabecera en nuestro directorio virtual para nuestra aplicación.


  2. 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. 😉


Cross-Posting desde www.lonetcamp.com


 

6 comentarios en “Iframe Cross Domain Cookie”

  1. saludos, disculpa creo que tengo un problema con algo que tiene que ver qon lo que explicas, mi detalle es este, tengo una pagina donde logueo, al loguear me manda al default, el cual es un contenedoro con un frame y en el frame es donde realmente tengo las pagians que usa el cliente, usa valores con variables de sesion, pero se pierde la sesion despues de un tiempo y m ecausa errores, como podria mantener esa sesion?? o en su defecto como usaria coockies para pasar esos datos?? el detalle es que uso ajax y cuando uso el updatepanel no permite usar el Response, gracias

  2. Hola. Tengo una consulta, no sé si me puedas ayudar. Tengo un página en un dominio “ABC”. Esa página, está colocada en un IFRAME en un dominio cliente “XYZ”. Mi página maneja una sesión para guardar los datos ya que es un carrito de compras. La configuración de la sesión, en el Web.config, es la sgte:

    Este carrito de compras, debo integrarlo con una página de un proveedor con un dominio diferente al mio y al de mi cliente. Esta integración consiste en enviarle unos parámetros vía POST y luego de esto recibir la respuesta del proveedor a través de un POST. El problema es que, cuando el proveedor debe enviarme sus datos a través del POST, no logro recibirlos a menos que, en el ACTION de su formulario esté el ID de la sesión, por ejemplo:

    Por ello, tendría que pasarle, por parámetro, el ID de mi sesión para que lo concatene en el action de su formulario y pueda recibir los valores sin problemas. Si bien es cierto, esto último se puede desarrollar sin problemas, mi pregunta es: por qué es necesario que, al hacer el POST, se tenga que colocar el ID de la sesión, si en ese momento no la estoy usando?

    Lo único que se me ocurre es quitar el atributo cookieless=”true” del Web.config, pero tendría problemas al generar la sesión dentro del IFRAME.

    Espero puedas ayudarme.

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *