2012-06-11 27 views
5

Me pregunto si es posible obtener cookies bajo otro dominio en lugar de mi nombre de dominio de aplicación actual.cookies de dominio cruzado Rails 3

Estoy construyendo una aplicación que accede a la API de otro sitio web. Si el usuario ya inició sesión desde el otro sitio, mi navegador creará cookies bajo ese nombre de dominio. Por ejemplo, el usuario que inició sesión en www.example.com, mi navegador almacenará cookies: cookies['token'] en el dominio www.example.com. Cuando el usuario visita mi sitio web, www.mywebsite.com, ¿cómo puedo obtener las cookies en www.example.com en mi servidor Rails?

Cualquier ayuda es altamente apreciar.

+2

Básicamente: no se puede. El objetivo de las cookies que tienen dominios es que el navegador solo envía las cookies que pertenecen al dominio actual. Dicho de otra manera, si encuentras una forma de leer las cookies que no pertenecen a tu dominio, has encontrado un exploit de seguridad. – Flambino

+0

Sí, he estado buscando en Google por días, y encontré muchas respuestas exactamente iguales a usted. Gracias por tu respuesta –

Respuesta

4

Esto se puede hacer, pero requiere que el cliente, su sitio web y su otro sitio web trabajen juntos. Tiene un cliente que sabe cómo autenticarse en el sitio A. Desea ver el sitio B como el usuario con el que sabe cómo autenticarse en el sitio A. La forma básica de lograr esto es hacer que el cliente se contacte con el sitio A, autenticarse, adquirir un token del sitio A en el que el sitio B puede confiar y luego entregar ese token al sitio B.

Efectivamente, desea construir un caso muy específico de OpenID u OAuth. Esto es ciertamente posible, pero vas a necesitar hacer algunos cambios en www.example.com para que funcione. Si puedes hacer esto, genial.

de inicio mediante la lectura de todo lo relacionado con OAuth. No necesita usar eso exactamente (aunque podría), pero le ayudará a explicar lo que necesita hacer: http://hueniverse.com/oauth/

+0

Para hacer esto, ¿necesito ambos sitios abiertos? o un enlace del sitio 1 al sitio 2? –

+0

Este último. Efectivamente necesita vincular los sitios. Imagine si el sitio A es un sitio como LiveJournal, y el sitio B es un sitio como el desbordamiento de la pila. Puede usar su cuenta de LiveJournal para iniciar sesión en Stack Overflow de la misma manera en que sugiero que resuelva este problema. Imagine que hace clic en "iniciar sesión" en el sitio B. Lo redirecciona al sitio A. El sitio A verifica su cookie de autenticación, luego lo redirecciona al sitio B e incluye un parámetro firmado "auth este usuario como usuario X". El sitio B reconoce esa autenticación e inicia sesión en el sitio B. Trabajan juntos. –

+0

Sí, entiendo lo que quieres decir. Se llama 'OpenID', pero mi problema es que el sitio A no proporciona este tipo de servicio, pero tiene su propia pantalla de inicio de sesión. Cuando un usuario visita el sitio A, el navegador creará cookies, y cuando el usuario visite el sitio B, quiero que el sitio B acceda a las cookies creadas en el sitio A. ¿Es posible hacer eso? –

1

Puede compartir cookies en diferentes subdominios de un dominio pero NO puede compartir cookies entre múltiples nombres de dominio .

Las cookies son almacenadas por el NAVEGADOR y el navegador no le permitirá acceder o almacenar las cookies de nombres de dominio externos. Sería un gran error de seguridad si los navegadores te permitieran hacer esto.

Puede, sin embargo, los datos de sesión proporción que se almacenan en el servidor de entre los nombres de dominio. Esto puede no ser del todo trivial, pero dado que la información de la sesión se almacena en el SERVIDOR, puede acceder a la información en el servidor entre las aplicaciones si es necesario. Si los datos de la sesión se almacenan en una base de datos, todo lo que se requiere es dar acceso a la base de datos a ambos dominios. Si es necesario, podría abrir su base de datos a un nombre de dominio externo y hacer que el dominio externo se conecte directamente a la base de datos en su servidor.

Cuestiones relacionadas