SameSite Нет атрибута cook ie, не установленный в Azure Web App - PullRequest
1 голос
/ 14 января 2020

Чтобы подготовиться к предстоящим изменениям в SameSite в Chrome 80, я обновил мой. NET Framework API с 4.6.2 до 4.7.2.

Я создал простую конечную точку теста, которая просто устанавливает повара ie с помощью SameSite=None:

public class TestController : ApiController
{
    public IHttpActionResult Get()
    {
        var cookie = new HttpCookie("foo", "bar")
        {
            HttpOnly = true,
            Secure = true,
            SameSite = SameSiteMode.None
        };

        HttpContext.Current.Response.SetCookie(cookie);

        return Ok();
    }
}

Это работает, как и ожидалось, локально, и возвращается следующий заголовок:

set-cookie: foo=bar; path=/; secure; HttpOnly; SameSite=None

Однако, это не работает при публикации в веб-приложении Azure, настроенном как 4.7 в качестве стека времени выполнения. Веб-приложение возвращает заголовок cook ie без SameSite:

Set-Cookie: foo=bar; path=/; secure; HttpOnly

Если я установлю его на Strict или Lax, оно будет работать так же, как и в Azure.

Это проблема с Azure? Есть ли что-то, что нужно настроить в веб-приложении, чтобы это работало, или, возможно, мне нужно настроить cook ie по-другому?

Ответы [ 3 ]

5 голосов
/ 15 января 2020

С { ссылка }. Одно из решений, которое также работает на 4.6.1, заключается в добавлении следующего к вашему web.config

Edit: Chrome теперь требует, чтобы вы включали secure; в ваши куки при использовании SameSite = нет.

<system.webServer>
 <rewrite>
       <outboundRules>
            <clear />
            <rule name="Add SameSite" preCondition="No SameSite">
                <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
                <action type="Rewrite" value="{R:0}; secure; SameSite=none" />
                <conditions>
                </conditions>
            </rule>
            <preConditions>
                <preCondition name="No SameSite">
                    <add input="{RESPONSE_Set_Cookie}" pattern="." />
                    <add input="{RESPONSE_Set_Cookie}" pattern="; secure; SameSite=none" negate="true" />
                </preCondition>
            </preConditions>
        </outboundRules>
  </rewrite>
 </system.webServer>

Предполагается, что перезапись URL установлена, когда вы размещаете свой собственный сайт iis. https://www.iis.net/downloads/microsoft/url-rewrite

3 голосов
/ 14 января 2020

Azure будет обновлено до конца месяца - см. Официальное объявление здесь : https://docs.microsoft.com/answers/questions/6842/announcement-samesite-cookie-handling-and-net-fram.html

Мы видим то же самое Обновление до 4.7.2 специально для решения той же проблемы сайта.

Похоже, что это было исправлено с выпуском Microsoft от 10 ноября, но еще не доступно на Azure.

Развертываемый сайт имеет цель. Net 4.7.2, и изменения работают при локальном тестировании, как и ожидалось.

Если мы декомпилируем файл System.Web.dll (загруженный через Kudu), мы видим более старую версию которые не обрабатывают файлы cookie того же сайта.

Похоже, что это проблема для других (с 4.7.2 несмотря на топи 4.8 c).

https://feedback.azure.com/forums/169385-web-apps/suggestions/37566262-upgrade-app-service-with-net-4-8

Временная метка на System.Web.dll - 11/12/2019, но она декомпилирована:

  if (this._sameSite != SameSiteMode.None)
        {
            stringBuilder.Append("; SameSite=");
            stringBuilder.Append(this._sameSite);
        }

Барри Дорранс из Microsoft, кажется, подтверждает, что это не было развернуто еще до Azure внизу этой страницы: https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/, где мы подняли это тоже проблема.

РЕДАКТИРОВАТЬ: Нам сообщили, что патч будет выпущен до Azure, начиная с этой недели, и ожидается, что он будет завершен к 31 января.

Обновление официально сообщается здесь: https://docs.microsoft.com/answers/questions/6842/announcement-samesite-cookie-handling-and-net-fram.html

0 голосов
/ 31 января 2020

Тот же сайт готовит ie изменения, адресованные в точке Net Framework 4.7.2 и далее.

Если вы хотите подтвердить эти изменения в службе приложений, перейдите к конечной точке Kudu (SCM) и в разделе Переменная среды, вы должны быть в состоянии найти версию платформы службы приложений.

Тот же сайт Cook * ie обновление доступно в версии службы приложений: 86.0.7.148 (или более поздней версии).

Полная информация о изменения можно найти по адресу https://azure.microsoft.com/en-in/updates/app-service-samesite-cookie-update/

Если на вас влияют эти изменения, вы можете временно разблокировать себя, используя следующие изменения конфигурации:

<configuration>
        <system.web>
              <sessionState cookieSameSite="None" />
        </system.web>
</configuration>

Вкл. Chrome браузер версии 80 и выше, который будет Chromium, даже если эти конфигурации могут не работать и потребуется исправление кода.

Обратите внимание, что с вышеуказанными изменениями старый браузер не будет работать; Приложения, доступные из более старых браузеров, которые поддерживают стандарт SameSite 2016 года, могут сломаться, когда получают свойство SameSite со значением None.

Пользовательский агент (браузер) можно проверить с помощью httpContext.Request.UserAgent

Надеюсь, что приведенная выше информация поможет вам:)

...