Comparte una cookie entre dos sitios web

He creado un sitio web (A) que inicia sesión y recupera datos de clientes de un servicio web por separado.

La organización que posee (A) también tiene un sitio web (B) que tiene un formulario web. Quieren que un usuario conectado en (A) pueda hacer clic en (B) y ver un formulario rellenado previamente con sus detalles.

Esto significa que (A) debe escribir su ID de cliente en una cookie, que (B) puede leer, y luego (B) puede solicitar los datos del servicio web y rellenar previamente el formulario.

Esto plantea dos preguntas:

  1. ¿Puede el sitio web (B) leer la cookie para el sitio web (A)?

  2. Si es así, para evitar que alguien edite una cookie y vea los datos de otras personas en el formulario, tendría que hacer algo como encriptar la cookie en (A) y luego descifrarla en (B): ¿alguna sugerencia a lo largo de esta línea?

No puedo cambiar el inicio de sesión existente a OAuth o algo así, ya que el servicio web es consumido por varios otros sitios, por lo que esto no puede cambiar.

No. El sitio web B no puede leer una cookie del sitio web A.

La solución más fácil es pasar la información de inicio de sesión / credencial del sitio web A al sitio web B y que el sitio web B establezca una cookie separada. Por ejemplo, después de iniciar sesión en el sitio web A, puede redirigirlos rápidamente al sitio web B con una cadena de cifrado. El sitio web B podría leer la información, establecer su propia cookie y redirigir al usuario al sitio A.

Es desordenado pero posible.

Mencionó que la misma compañía posee ambos sitios. Como sospechaba, si los sitios tienen el mismo dominio, como http://www.mycompany.com y store.mycompany.com, entonces pueden compartir cookies. El encabezado de respuesta HTTP se vería así:

Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com 

Dado que el cliente tiene acceso directo a estos datos, también debe incluir una firma para que se detecte la manipulación. Por lo general, todo está encriptado y firmado en un “token”, que se configura como la cookie. Pero técnicamente, solo se requiere la firma.

Si en su caso todos sus usuarios utilizan navegadores con soporte HTML5, puede usar el método window.postMessage que permite addEventListener por un lado y postMessage desde el otro. Aquí hay un buen artículo / ejemplo: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage .

Entonces los pasos son simples:

  1. agregar al sitio A un iframe oculto al sitio B
  2. envíe la cookie de B a A usando window.postMessage
  3. almacenar la cookie recibida en la cookie de A

Las cookies solo son accesibles para un único dominio al que están configuradas.

Creo que si usa dos subdominios en el mismo dominio, sería posible compartir las cookies, sin embargo, el navegador no envía cookies establecidas en un dominio a ninguna otra.

Editar: también quiere evitar almacenar grandes cantidades de datos en una cookie. ¿Existe la posibilidad de que puedas crear una API que el sitio B pueda consultar con javascript?

Posible solución alternativa: puede usar un marco en línea en el sitio secundario para mostrar el contenido del sitio principal (ocupando toda la ventana):

    your page title    
TESTING

Existen herramientas de código abierto en Internet que pueden hacer eso, pero esto va en contra de toda la idea detrás de la filosofía de las cookies. Las cookies están destinadas a ser accedidas por un solo dominio. Sin embargo, puede burlarse de ese dominio y ‘Hackear’ en el navegador. No se recomienda y algunos navegadores tienen una seguridad más estricta y no permiten eso.

Sugiero que cree un servicio web en el sitio web A y le dé acceso de lectura a B para leerlo.