Совместное использование сеансовых файлов cookie ASP.NET с помощью Java-апплета - PullRequest
3 голосов
/ 14 октября 2008

У меня есть Java-апплет, который запускается внутри страницы aspx с проверкой подлинности с помощью форм. В версии моего сайта .NET 1.1 апплет имеет доступ к cookie-файлам сеанса и может получить файл с сервера, но в версии .NET 2.0 он не может пройти проверку подлинности.

Я видел пару постов в других форумах, в которых говорится, что 2.0 по умолчанию устанавливает куки для HttpOnly, но приведенные решения пока не работают для меня. Я также где-то читал, что 2.0 может быть дискриминационным в зависимости от агента пользователя.

У кого-нибудь есть опыт или понимание этого?

Ответы [ 4 ]

5 голосов
/ 06 сентября 2011

Этот вопрос старый, но я подумал, что было бы полезно получить правильный ответ здесь.

Филип путает Java на стороне сервера с Java на стороне клиента. Он прав, что нельзя использовать сеансы между двумя серверными платформами, такими как Java (J2EE) и ASP.Net, не используя индивидуальный подход.

Однако апплеты на стороне клиента и, следовательно, должны иметь возможность доступа к информации о сеансе страницы хоста. Проблема заключается в том, что ASP.Net 2.0 добавил флаг HttpOnly для файлов cookie сеанса. Этот флаг не позволяет апплетам JavaScript и Java получать доступ к этим файлам cookie.

Временное решение: отключить флаг HttpOnly для файлов cookie сеанса. Хотя вы можете сделать это в конфигурации в более новых версиях ASP.Net, в предыдущих версиях решением было добавить следующий код в файл 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;
            }
        }
    }
}

Обратите внимание, что даже с этим исправлением не все комбинации браузера / ОС / Java могут получать доступ к файлам cookie. В настоящее время я исследую проблему, связанную с недоступностью файлов cookie сеанса в Firefox 4.0.1 с Java 1.6.0_13 в Windows XP.

Обходной путь заключается в использовании подхода, предложенного доктором Дадом, когда идентификатор сеанса передается апплету в качестве параметра, а затем либо внедряется в URL-адрес запроса (требуется включение сеансов URL-адреса на стороне сервера). конфигурации) или отправлено в виде файла cookie, установленного вручную.

1 голос
/ 30 ноября 2010

Филипп правильно и неверно, по крайней мере, в отношении Java и ASP.NET. Апплет может получить доступ к сеансу ASP.NET путем обмана. В моем случае мы добавили идентификатор сеанса в качестве параметра к апплету, который затем апплет добавляет в виде cookie в свои запросы. Кажется, работает нормально. (Мы зашифровали идентификатор сессии, чтобы помешать этим отвратительным хакерским людям!)

0 голосов
/ 10 апреля 2012

Я знаю, что это может быть очень поздний ответ, но я могу дать вам более простое решение: - обычно, не всегда апплеты интенсивно используют html и javascript для своих интерфейсов и взаимодействия. - Javascript запускается в браузере. - Ajax звонки сделаны браузером. - Ajax-вызовы асинхронны и могут быть легко интегрированы в логику апплета.

Можно найти элегантное решение, интегрирующее вызовы Ajax с логикой апплета, делегируя браузеру безопасность.

0 голосов
/ 18 марта 2009

Ответ Филипа не совсем правильный. Я запустил программу для прослушивания заголовков HTTP на своей рабочей станции, и апплет Java фактически предоставляет билет проверки подлинности ASP.NET при некоторых обстоятельствах - просто недостаточно надежный для моих нужд.

В конце концов я нашел решение, но это не полностью решило мою проблему. Вы можете добавить запись в web.config в .NET 2.0: <httpCookies httpOnlyCookies="false" />; но это не сработало для всех моих пользователей.

Долгосрочное решение оказалось модифицировать Java-апплет, так что ему не нужно ничего получать с веб-сервера.

...