Pergunta

Eu tenho um applet Java que é executado dentro de uma página aspx formas autenticados. Na versão .NET 1.1 do meu site, o applet tem acesso ao cookie de sessão e é capaz de recuperar um arquivo do servidor, mas na versão .NET 2.0 ele não consegue autenticar.

Eu vi um par de posts no fórum em outros lugares que afirmam que 2,0 conjuntos de cookies para HttpOnly por padrão, mas as soluções dadas não funcionaram para mim até agora. Eu também li em algum lugar que 2.0 pode ser discriminar com base em user-agent.

Alguém tem alguma experiência ou visão sobre isso?

Foi útil?

Solução

Esta questão é antiga, mas achei que era importante ter a resposta correta aqui.

Filip é confuso do lado do servidor Java com do lado do cliente Java. Ele está correto que você não pode sessões de compartilhamento entre duas plataformas do lado do servidor, como Java (J2EE) e ASP.Net sem usar uma abordagem personalizada.

No entanto, applets estão do lado do cliente e, portanto, deve ser capaz de acessar as informações de sessão da página host. A questão é que ASP.Net 2.0 adicionado a bandeira HttpOnly em cookies de sessão. Este sinalizador impede que JavaScript e applets Java acessem esses cookies.

A solução é desligar o sinalizador HttpOnly em cookies de sessão. Enquanto você pode ser capaz de fazê-lo na configuração em versões mais recentes do ASP.Net, nas versões anteriores a solução foi adicionar o seguinte código ao seu arquivo global:

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;
            }
        }
    }
}

Note que, mesmo com essa correção, nem todas as combinações / OS / Java do navegador pode acessar cookies. Atualmente estou pesquisando um problema com cookies de sessão não estar acessível no Firefox 4.0.1 com Java 1.6.0_13 no Windows XP.

A solução é usar a abordagem Dr. pai sugeriu, onde o ID da sessão é passado para o applet como um parâmetro, e então fica embutido no URL pedido (requer sessões de URL para ser ligado no lado do servidor configuração) ou enviado como um cookie manualmente-set.

Outras dicas

Filip é tanto correto e incorreto, pelo menos wrt para Java e ASP.NET. Um applet pode obter acesso à sessão ASP.NET por engano. No meu caso, nós adicionamos o ID de sessão como um parâmetro para o applet, que o applet em seguida, adiciona como um cookie em sua pedidos. Parece ok trabalho. (Nós criptografada o ID de sessão para foil aqueles desagradável popular hackers!)

A resposta de Filip não é inteiramente correcto. Corri um programa para farejar o HTTP cabeçalhos no meu trabalho, e o applet Java de fato presente a permissão de autenticação ASP.NET em algumas circunstâncias -. Simplesmente não confiável o suficiente para minhas necessidades

Finalmente eu fiz encontrar uma solução para isso, mas não totalmente resolver o meu problema. Você pode adicionar uma entrada para o web.config em .NET 2.0: <httpCookies httpOnlyCookies="false" />; mas isso não funcionou para todos os meus usuários.

A solução a longo prazo acabou por ser modificando o applet Java para que ele não precisa de recuperar qualquer coisa a partir do servidor web.

Estou ciente de que pode ser uma resposta muito tarde, mas eu posso te dar uma solução mais simples: - normalmente, nem sempre, applets fazem uso pesado de HTML e JavaScript para as suas interfaces e interação. - Javascript é executado no navegador. - chamadas Ajax são feitas pelo navegador. - chamadas Ajax são assíncronas e pode ser integrado facilmente a uma lógica applets

.

Pode-se encontrar uma solução elegante que integra chamadas Ajax para a lógica de um applet, delegando para o navegador da segurança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top