Compartir Cookie entre diferentes puertos.

Tengo una aplicación1 (C #) que está alojada en el puerto: 80 y la aplicación 2 (nodejs) que está alojada en el puerto: 3030. Ambos están en localhost.

El flujo de trabajo de la solicitud es el siguiente:

  • Los navegadores envían solicitud a la aplicación 1.
  • La aplicación 1 devuelve el número de cookies.
  • Posteriormente el navegador envía la solicitud a la aplicación 2.
  • El problema está en el último paso, las cookies no se incluyen en la solicitud.

Cosas que he probado / comprendido:

  • Entiendo que esta es una restricción de la política del mismo origen y debido a un puerto diferente # el navegador los trata como dominios diferentes.
  • En la aplicación 1 (usando System.Web.HttpCookie), he intentado configurar el dominio para que sea específico del puerto (“127.0.0.1:3030”) pero parece que el navegador no lo acepta o lo ignora.

    //c# code var testCookie1 = new HttpCookie("Test", "testValue"); testCookie1.Domain = "127.0.0.1:3030"; testCookie1.Path = "/"; testCookie1.Expires = DateTime.Now.AddDays(1); Response.SetCookie(testCookie1); var testCookie2 = new HttpCookie("Test2", "testValue2"); testCookie2.Domain = "127.0.0.1"; testCookie2.Path = "/"; testCookie2.Expires = DateTime.Now.AddDays(1); Response.SetCookie(testCookie2); 

Cookies que vuelven del servidor. Cookies que se almacenan en el navegador.

El servidor envía una cookie con el número de puerto adjunto, pero parece que el navegador la ignora.

Y aquí están mis llamadas ajax:

  var request = $.ajax({ url: 'http://127.0.0.1:3030/SomeTask', type: 'POST', crossDomain: true, }); 

Su dominio es el mismo en este caso localhost, por lo que no debería haber ningún problema.

Otra cosa es: el puerto es parte de un URI, no de un dominio, el dominio también es parte de un URI, así que estás mezclando manzanas y frutas …

Por favor refiérase a esta otra pregunta en SO

El rfc dice claramente

Introducción

Por razones históricas, las cookies contienen una serie de infelicidades de seguridad y privacidad. Por ejemplo, un servidor puede indicar que una cookie determinada está destinada a conexiones “seguras”, pero el atributo Seguro no proporciona integridad en presencia de un atacante de red activo. De manera similar, las cookies para un host determinado se comparten en todos los puertos de ese host, a pesar de que la “política del mismo origen” utilizada por los navegadores web aísla el contenido recuperado a través de diferentes puertos.

Yo no probé yo mismo.

En mi trabajo, tenemos que compartir cookies a través de subdominios (no puertos) configurando un punto delante del dominio

var testCookie1 = new HttpCookie("Test", "testValue"); testCookie1.Domain = "." + mydomain;

De esta manera x.mydomain yy.mydomain compartirán cookies.

Por lo tanto, intente no establecer el puerto en las cookies y use el nombre localhost en lugar de la dirección IP resuelta.

Puede simular la configuración de producción en su archivo hosts algo así como:

 127.0.0.1 myawesomesubdomain.thisdomainnotexist.com.tr 

y luego configurar la cookie a ese dominio sin el puerto

Para compartir cookies, sus dos aplicaciones deben estar en el mismo dominio, como app1.myapp.com y app2.myapp.com , de esta forma, ambas tendrán acceso a myapp.com cookies de myapp.com .

Puedes emular esto en local, configurando:

 127.0.0.1 app1.myapp.com 127.0.0.1 app2.myapp.com 

en su archivo host ubicado en C:\Windows\System32\drivers\etc o /etc/hosts

Aquí hay dos soluciones diferentes que puedes probar:

  1. Ejecuta un servidor Apache y enruta las solicitudes a cualquiera de los dos servidores.
  2. Deshabilite la seguridad (es decir, la misma política de origen) en los navegadores.