У нас есть ASP. NET веб-форм, а также ASP. NET MVC приложений с Azure AD Integration, которые размещены в среде Azure IAAS. Из-за недавней версии безопасности Chrome> 80 и выше, большинство приложений начали ломаться. Ниже приведена версия фреймворка
Все приложения были запущены на 4.5.2, а также зависимый пакет NuGet
. Чтобы устранить эту проблему, мы исследовали приведенную ниже опцию. Поскольку у нас есть несколько вариантов, нам нужны экспертные данные о том, какой вариант лучше всего подходит для APPS с Azure AD Integration.
Чтобы установить правило перезаписи IIS под тегом system.webServer
. Работает без каких-либо изменений кода и обновления инфраструктуры
<rewrite>
<outboundRules>
<preConditions>
<!-- Checks User Agent to identify browsers incompatible with SameSite=None -->
<preCondition name="IncompatibleWithSameSiteNone" logicalGrouping="MatchAny">
<add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" />
<add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" />
<add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" />
</preCondition>
</preConditions>
<!-- Adds or changes SameSite to None for the session cookie -->
<!-- Note that secure header is also required by Chrome and should not be added here -->
<rule name="SessionCookieAddNoneHeader">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)?" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
</conditions>
<action type="Rewrite" value="{R:1}; SameSite=None; Secure" />
</rule>
<!-- Removes SameSite=None header from all cookies, for most incompatible browsers -->
<rule name="CookieRemoveSameSiteNone" preCondition="IncompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)?" />
<action type="Rewrite" value="{R:1}" />
</rule>
</outboundRules>
</rewrite>
Другой вариант, мы попытались обновить версию Framework до 4.7.2 и соответствующие пакеты nuget. Требуются изменения кода в OpenIDconnect. Мы пытались реализовать то же самое на основе документации, предоставленной Microsoft
https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-handle-samesite-cookie-changes-chrome-browser?tabs=dotnet
Третьим было попытаться понизить версию фреймворка до 4.5.0 и соответствующих пакетов NuGet. Эта опция также работает нормально.