#asp.net #asp.net-mvc #cookies #iframe #samesite
#asp.net #asp.net-mvc #файлы cookie #iframe #тот же сайт
Вопрос:
У нас есть ASP.NET Веб-сайт на основе. У нас есть требование запускать сайт в iframe третьей стороны. Различные части сайта недавно перестали работать в этом сценарии iframe, и мы сузили его до использования пользователем Chrome и AspNet.ApplicationCookie, а также пары пользовательских файлов cookie, недоступных в iframe (никаких проблем, возникающих за пределами iframe).
Сайт использует аутентификацию OWIN, поэтому я смог перейти на ASP.NET 4.8 и пакеты OWIN Nu&et. Это позволило мне установить CookieSameSite
свойство в CookieAuthenticationOptions
из IAppBuilder
. После этого я вижу, что AspNet.ApplicationCookie был помечен как безопасный, а SameSite = None. Идеальный.
Однако для пользовательских файлов cookie я не могу заставить работать настройку SameSite. Код для создания cookie:
HttpContext.Current.Response.SetCookie(new HttpCookie(key, value)
{
Expires = expiration,
SameSite = SameSiteMode.None,
Secure = true
});
Эти файлы cookie работают вне iframe. Используя инструменты разработки Chrome и Firefox, я вижу, что они помечены как безопасные, но параметр SameSite не установлен (в частности, отображается «неуказанный» в инструментах разработки Firefox), поэтому они по-прежнему недоступны при запуске в iframe.
Некоторые связанные вещи:
- Мы установили последнюю версию .net framework 4.8, поэтому я не думаю, что нам нужно устанавливать какие-либо исправления на сервер для поддержки SameSite.
- Локально настройки cookies выглядят корректно. Я вижу файлы cookie, помеченные как безопасные, и SameSite = None. Однако это не удается при настройке сервера с балансировкой нагрузки (2 сервера Windows 2016 за балансировщиком нагрузки).
- Используя chrome://fla&s /, я могу установить для
SameSite by default cookies
значение Disabled, и все работает, как ожидалось, в iframe. (Я думаю, это просто подтверждает, что проблема действительно в SameSite). - Я также пытался установить параметр SameSite с помощью confi&, но безрезультатно:
<httpCookies requireSSL="true" sameSite="None" /&&t;
Я неправильно создаю файлы cookie? Я ошибаюсь насчет того, что патч не нужен? Есть ли какой-нибудь способ определить, виноват ли в этом балансировщик нагрузки?
ОБНОВЛЕНИЕ — 17.08.2020
Я не приблизился к объяснению этого. Кое-что, что действительно работает для меня, — это использовать исходящую перезапись IIS для добавления «Secure; SameSite = None;» ко всем файлам cookie — это, казалось, было распространенным способом решения этой проблемы до обновлений 4.7.2 и 4.8.
Перезапись гарантирует, что SameSite
и Secure
будут установлены так, как ожидалось. Для меня это исключает балансировку нагрузки, каким-либо образом влияющую на файлы cookie.
Если я прав, остается только проблема с кодом, но, чувак, это кажется довольно простым.