Cambios del navegador en el manejo de cookies de SameSite

Problema

Chrome versión 80 y posteriores implementaron una política SameSite de forma que cualquier cookie no establecida explícitamente con un valor SameSite se establecerá en SameSite= Lax.

Los detalles técnicos completos del atributo SameSite están disponibles en la RFC siguiente:https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7

Síntoma

Los síntomas variarán en función del uso de la galleta. Por ejemplo, los inicios de sesión iniciados por SP que utilizan un IDP en un dominio diferente que no ha establecido SameSite=None; Secure en su cookie de sesión tendrán que autenticarse constantemente en el IDP porque la cookie de sesión no se enviará. Otros flujos que requieren una cookie fallarán inesperadamente.

Motivo

Google ha anunciado que Chrome versión 80 y posteriores cambiará los valores predeterminados para las cookies HTTP entre sitios. Se prevé que otros proveedores de navegadores hagan el mismo cambio en un futuro próximo. Encontrará más información en el anuncio del proyecto Chromium aquí: https://blog.chromium.org/2019/10/developers-get-ready-for-new.html

Diagnóstico del problema

Dado que no se ha podido producir una respuesta esperada, valide que se cumplen todas las sentencias siguientes:
  • La solicitud se origina en un navegador, no en un cliente HTTP que no sea de navegador.
  • La aplicación empresarial responsable de responder está protegida por el proxy inverso y depende de la gestión de sesiones, la afinidad o su propia cookie HTTP específica de la aplicación.
  • La cookie en cuestión no se ha recibido de forma inesperada dentro de la solicitud HTTP.
  • La solicitud en sí no es una "navegación de nivel superior"; en otras palabras, no es la solicitud que se muestra en la barra de direcciones del navegador.
    • Tome nota del dominio utilizado en la navegación de nivel superior.
  • La cookie en cuestión no estaba acompañada por el atributo SameSite cuando se transmitió originalmente con la cabecera de respuesta HTTP Set-Cookie.
  • El "sitio para cookies" en la URL de la solicitud que falla es diferente del "sitio para cookies" en la navegación de nivel superior.
    • El algoritmo para determinar "sitio para cookies" para una solicitud se describe en detalle aquí: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03
    • Una explicación simplificada de "sitio para cookies" para una URL de solicitud es la parte más a la derecha del nombre de host que se registró directamente con algún registro público, o el "dominio de nivel superior efectivo + 1". Por ejemplo, todos los URL que terminan en ".example.com" tienen el mismo "sitio para cookies".
    • Además de los TLD tradicionales (como .com y .net) y eTLDs (como ".co.uk"), los navegadores también consideran "sufijos públicos" con los que los usuarios registran subdominios, como por ejemplo github.io. Esto significa que el "sitio para cookies" para el URL http://test.github.io/ es "test.github.io".

Solucionar el problema

El proxy inverso se puede configurar para añadir atributos a las cookies a medida que las cookies se devuelven al cliente. Esto se consigue añadiendo entradas a la stanza [cookie-attributes].

Nota: Algunos navegadores más antiguos no dan soporte a la opción SameSite=None y se comportan de forma incoherente cuando se recibe una cookie con este atributo. Para ayudar a superar este problema, el atributo SameSite=None sólo se debe añadir a las cookies si el agente de usuario no coincide con uno de estos navegadores más antiguos. Se ha añadido un nuevo grupo de agentes de usuario, tal como se define en la stanza [user-agent-groups], al archivo de configuración de proxy inverso predeterminado para agrupar estos navegadores más antiguos. El nombre de grupo es 'unsupported-same-site' y debe utilizarse al definir la stanza [cookie-attributes] .
Los valores que se pueden utilizar para un flujo de SSO federado son los siguientes:
PD-S-SESSION-ID = [-unsupported-same-site]SameSite=None; Secure
PD_STATEFUL* = [-unsupported-same-site]SameSite=None; Secure
AMWEBJCT*<isam>*JSESSIONID = [-unsupported-same-site]SameSite=None; Secure
AMWEBJCT*<isam>*https*<SAMESITE_FEDERATION>* = [-unsupported-same-site]SameSite=None; Secure
donde <SAMESITE_FEDERATION> es el nombre de una federación de Security Verify Access Federation y <isam> es el nombre de la unión que se crea al ejecutar el asistente de configuración de federación incorporado.