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





Ответ Филипа не совсем правильный. Я запустил программу для прослушивания 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.
Я понимаю, что это может быть очень поздний ответ, но я могу предложить вам более простое решение: - обычно, не всегда, апплеты интенсивно используют html и javascript для своих интерфейсов и взаимодействия. - В браузере запущен Javascript. - Вызовы Ajax выполняются браузером. - Вызовы Ajax асинхронны и могут быть легко интегрированы в логику апплетов.
Можно найти элегантное решение, интегрирующее вызовы Ajax в логику апплета, делегируя безопасность браузеру.
Привет, обратите внимание, что это также не полный ответ, поскольку в нем не упоминается, что отключение HttpOnly откроет ваш сайт для XSS-атаки.