Lo descubrimos.
De alguna manera, el atributo "SameSite" de la cookie "ASP.NET_SessionId" se predetermina a "Lax" y esto hace que la cookie de sesión no se agregue a la solicitud realizada por el código javascript de la pasarela de pago.
Agregamos la siguiente regla al archivo web.config para anular este valor y establecerlo en "Ninguno".
<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>
ACTUALIZACIÓN 1 : Solo agregar la configuración anterior resolvió el problema para los navegadores modernos, pero nos dimos cuenta de que todavía teníamos problemas con las versiones anteriores de Micosoft Edge e Internet Explorer.
Por lo tanto, necesitábamos agregar el atributo cookieSameSite = "None" al nodo sessionState en el archivo web.config.
<sessionState cookieSameSite="None" />
Sin embargo, tenga cuidado con este cambio de configuración, ya que las versiones anteriores de .NET Framework no lo admiten y hacen que su sitio muestre una página de error.
Por cierto, todavía tenemos problemas con los navegadores en iOS 12. Pero creo que está relacionado con este error confirmado
ACTUALIZACIÓN 2 : vea la respuesta de zemien para una posible solución sobre el problema de IOS
ACTUALIZACIÓN 3 : Al combinar nuestros hallazgos con las sugerencias en la respuesta de zemien, hemos creado las siguientes reglas de reescritura. Hemos estado usando esta configuración en producción. Pero cuidado: marca todas las cookies con el atributo "SameSite: None" para navegadores compatibles y excluye el atributo SameSite, si existe, para navegadores incompatibles. Puede parecer complicado, pero traté de explicarlo a través de líneas de comentarios.
Esta es la configuración FINAL que utilizamos en la producción:
<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>
Modifiqué varias respuestas SO para obtener esta reescritura de URL que se agrega
SameSite=None
a las cookies de sesión, y también eliminoSameSite=None
de todas las cookies para la mayoría de los navegadores incompatibles. El objetivo de esta reescritura es preservar el comportamiento "heredado" anterior a Chrome 80.Escritura completa en mi blog de primera línea del codificador :
Esto debería funcionar para la mayoría de las aplicaciones ASP .Net y ASP .Net Core, aunque los Frameworks más nuevos tienen el código y las opciones de configuración adecuados para permitirle controlar este comportamiento. Recomiendo investigar todas las opciones disponibles antes de usar mi reescritura anterior.
fuente