Совместное использование файлов cookie сеанса ASP.NET с помощью Java-апплета

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
4 480
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

Ответ принят как подходящий

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

Филип путает серверную 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.

Привет, обратите внимание, что это также не полный ответ, поскольку в нем не упоминается, что отключение HttpOnly откроет ваш сайт для XSS-атаки.

shahar eldad 17.07.2019 09:02

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

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

Другие вопросы по теме