Nós descobrimos isso.
De alguma forma, o atributo "SameSite" do cookie "ASP.NET_SessionId" é padronizado como "Lax" e isso faz com que o cookie da sessão não seja adicionado à solicitação feita pelo código javascript do gateway de pagamento.
Adicionamos a seguinte regra ao arquivo web.config para substituir esse valor e defini-lo como "Nenhum".
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Add SameSite" preCondition="No SameSite">
<match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
<action type="Rewrite" value="{R:0}; SameSite=None" />
<conditions>
</conditions>
</rule>
<preConditions>
<preCondition name="No SameSite">
<add input="{RESPONSE_Set_Cookie}" pattern="." />
<add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=None" negate="true" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
ATUALIZAÇÃO 1 : A adição da configuração acima resolveu o problema dos navegadores modernos, mas percebemos que ainda estávamos tendo problemas com as versões mais antigas do Micosoft Edge e do Internet Explorer.
Portanto, precisamos adicionar o atributo cookieSameSite = "None" ao nó sessionState no arquivo web.config.
<sessionState cookieSameSite="None" />
Porém, tenha cuidado com essa alteração na configuração, pois as versões mais antigas da estrutura .net não a suportam e fazem com que seu site exiba página de erro.
A propósito, ainda estamos tendo problemas com navegadores no IOS 12. Mas acho que está relacionado a esse bug confirmado
ATUALIZAÇÃO 2 : consulte a resposta do zemien para obter uma possível correção sobre o problema do IOS
ATUALIZAÇÃO 3 : Ao combinar nossas descobertas com as sugestões da resposta do zemien, criamos as seguintes regras de reescrita. Temos usado essa configuração na produção. Mas cuidado: marca todos os cookies com o atributo "SameSite: None" para navegadores compatíveis e exclui o atributo SameSite, se existir, para navegadores incompatíveis. Pode parecer complicado, mas tentei explicar por meio de linhas de comentário.
Esta é a configuração FINAL que usamos na produção:
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<preConditions>
<!-- 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>
<!-- Rest of the browsers are assumed to be compatible with SameSite=None -->
<preCondition name="CompatibleWithSameSiteNone" logicalGrouping="MatchAll">
<add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" negate="true" />
<add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" negate="true" />
<add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" negate="true" />
</preCondition>
</preConditions>
<!-- Rule 1: Remove SameSite part from cookie for incompatible browsers if exists -->
<rule name="Remove_SameSiteCookie_IfExists_ForLegacyBrowsers" preCondition="IncompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)" />
<action type="Rewrite" value="{R:1}" />
</rule>
<!-- Rule 2: Override SameSite's value to None if exists, for compatible browsers -->
<rule name="Override_SameSiteCookie_IfExists_ForModernBrowsers" preCondition="CompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)" />
<action type="Rewrite" value="{R:1}; SameSite=None" />
</rule>
<!-- Rule 3: Add SameSite attribute with the value None if it does not exists, for compatible browsers -->
<rule name="Add_SameSiteCookie_IfNotExists_ForModernBrowsers" preCondition="CompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern=".*"/>
<!-- Condition explanation: Cookie data contains some string value but does not contain SameSite attribute -->
<conditions logicalGrouping="MatchAll">
<add input="{R:0}" pattern="^(?!\s*$).+"/>
<add input="{R:0}" pattern="SameSite=.*" negate="true"/>
</conditions>
<action type="Rewrite" value="{R:0}; SameSite=None" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
Eu modifiquei várias respostas do SO para criar essa reescrita de URL que adiciona
SameSite=None
aos cookies de sessão e também removiSameSite=None
de todos os cookies da maioria dos navegadores incompatíveis. O objetivo dessa reescrita é preservar o comportamento "legado" anterior ao Chrome 80.Artigo completo no meu blog Coder Frontline :
Isso deve funcionar para a maioria dos aplicativos ASP .Net e ASP .Net Core, embora as Estruturas mais recentes possuam código e opções de configuração adequadas para permitir que você controle esse comportamento. Eu recomendaria pesquisar todas as opções disponíveis antes de usar minha reescrita acima.
fonte