Compartir las cookies de sesión de ASP.NET con un applet de Java

Tengo un applet de Java que se ejecuta dentro de una página aspx autenticada por formularios. En la versión .NET 1.1 de mi sitio, el applet tiene acceso a la cookie de sesión y puede recuperar un archivo del servidor, pero en la versión .NET 2.0 no puede autenticarse.

He visto un par de publicaciones en foros en otros lugares que afirman que 2.0 establece cookies en HttpOnly de forma predeterminada, pero las soluciones proporcionadas no me han funcionado hasta ahora. También leí en algún lugar que 2.0 puede discriminar en función del usuario-agente.

¿Alguien tiene alguna experiencia o conocimiento sobre esto?

3

4 Respuestas

Esta pregunta es antigua, pero pensé que era valioso tener la respuesta correcta aquí.

Filip confunde Java del lado del servidor con Java del lado del cliente. Tiene razón al decir que no puede compartir sesiones entre dos plataformas del lado del servidor, como Java (J2EE) y ASP.Net sin usar un enfoque personalizado.

Sin embargo, los applets están en el lado del cliente y, por lo tanto, deberían poder acceder a la información de sesión de la página del host. El problema es que ASP.Net 2.0 agregó el indicador HttpOnly en las cookies de sesión. Este indicador evita que JavaScript y los applets de Java accedan a estas cookies.

La solución consiste en desactivar el indicador HttpOnly en las cookies de sesión. Si bien es posible que pueda hacerlo en la configuración en las versiones más recientes de ASP.Net, en las versiones anteriores la solución era agregar el siguiente código a su archivo Global.asax:

protected void Application_EndRequest(object sender, EventArgs e)
{
    /**
    * @note Remove the HttpOnly attribute from session cookies, otherwise the 
    *      Java applet won't have access to the session. This solution taken
    *      from
    *      http://blogs.msdn.com/jorman/archive/2006/03/05/session-loss-after-migrating-to-asp-net-2-0.aspx
    *
    *      For more information on the HttpOnly attribute see:
    *
    *      http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/aspnet.aspx
    *      http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx
    */
    if (Response.Cookies.Count > 0)
    {
        foreach (string lName in Response.Cookies.AllKeys)
        {
            if (lName == FormsAuthentication.FormsCookieName || 
                lName.ToLower() == "asp.net_sessionid")
            {
                Response.Cookies[lName].HttpOnly = false;
            }
        }
    }
}

Tenga en cuenta que incluso con esta solución, no todas las combinaciones de navegador/OS/Java pueden acceder a las cookies. Actualmente estoy investigando un problema con las cookies de sesión que no están accesibles en Firefox 4.0.1 con Java 1.6.0_13 en Windows XP.

La solución consiste en utilizar el enfoque sugerido por el Dr. Papá, donde la ID de la sesión se pasa al applet como parámetro y luego se incrusta en la URL de solicitud (requiere que las sesiones URL se activen en la configuración del lado del servidor) o enviado como una cookie configurada manualmente.

5
agregado

Filip es correcto e incorrecto, al menos wrt a Java y ASP.NET. Un applet puede tener acceso a la sesión ASP.NET haciendo trampa. En mi caso, agregamos la identificación de la sesión como un parámetro al applet, que el applet luego agrega como una cookie en sus solicitudes. Parece que funciona bien. (¡Codificamos la identificación de la sesión para frustrar a esa desagradable gente de hackers!)

1
agregado

Soy consciente de que puede ser una respuesta tardía, pero puedo darte una solución más simple: - generalmente, no siempre, los applets hacen un uso intensivo de html y JavaScript para sus interfaces e interacción. - Javascript se ejecuta en el navegador. - Las llamadas a Ajax las realiza el navegador. - Las llamadas Ajax son asincrónicas y pueden integrarse fácilmente a una lógica de applets.

Uno puede encontrar una solución elegante que integra llamadas Ajax a la lógica de un applet, delegando en el navegador la seguridad.

0
agregado

La respuesta de Filip no es del todo correcta. Ejecuté un programa para olfatear los encabezados HTTP en mi estación de trabajo, y el applet de Java, de hecho, presenta el ticket de autenticación ASP.NET en algunas circunstancias, pero no de manera confiable para mis necesidades.

Eventually I did find a solution to this, but it didn't entirely solve my problem. You can add an entry to the web.config in .NET 2.0: ; but this didn't work for all my users.

La solución a largo plazo resultó ser la modificación del applet de Java para que no tenga que recuperar nada del servidor web.

0
agregado
JavaScript - Comunidad española
JavaScript - Comunidad española
4 de los participantes

En este grupo hablamos de JavaScript. Partner: es.switch-case.com