2009-07-05 32 views
23

Tengo un pequeño problema.Cookies de dominio cruzado

¿Cómo configuro una cookie para varios dominios?

Entiendo los problemas de seguridad, y estoy seguro de que ya se han hecho antes. La razón de esto es SSO.

es decir.

account.domain.com tendrá que establecer dominio conectado para:

domain.com, domain1.com, domain2.com.

¿Hay alguna manera fácil, usando PHP y cookies, o alguna alternativa?

+0

Aquí hay otra publicación en stackoverflow que muestra cómo lo hace Facebook, y sí, es posible con iframes y javascript. http://stackoverflow.com/questions/4701922/how-does-facebook-set-cross-domain-cookies-for-iframes-on-canvas-pages – inorganik

+0

[HTTP State Management Mechanism RFC6265] (http: // tools. ietf.org/html/rfc6265) – hakre

Respuesta

28

No hay forma de que domain.com establezca una cookie para domain1.com. Lo que intenta hacer solo se puede resolver haciendo que el navegador del usuario envíe solicitudes a cada dominio, que luego establecerá su propia cookie.

Luego necesita una forma para que cada dominio verifique la identidad del usuario. Hay dos enfoques para esto:

  1. Volver canal - los sitios de contacto entre sí directamente para determinar si un usuario se registra en
  2. El paso de un token en el GET o POST - cuando broweser del usuario es redirigido a. el otro sitio se pasa un parámetro firmado digitalmente que contiene la identidad y el estado de la sesión.

Es realmente bastante complicado. Te sugiero que no hagas el tuyo. Eche un vistazo a SimpleSAMLPHP para una implementación PHP de lo que estoy describiendo.

+0

Aquí hay otra forma, obtener domain.com para conectarse con domain1.com y obtener token y luego pasar ese token en el encabezado de las llamadas JS o como un campo separado, entonces domain1.com debe verificar ese token y responder en consecuencia. ¿Tiene sentido? – Hafiz

5

Lo que estamos tratando no se puede hacer. (Es un problema de seguridad del navegador, no uno de PHP).

Además de utilizar alguna forma de autenticación externa, lo más cercano que puede lograr es hacer que una cookie sea accesible a través de subdominios, en cuyo caso solo usa el arg 'dominio' opcional de la función set_cookie de PHP.

5

Esto se puede hacer a través de un dominio que actúa como un maestro y otros como un esclavo.

Digamos que tenemos un dominio accounts.domain.com y es nuestro maestro.

Entonces tenemos nuestros esclavos domain.com, y something.comanother.com

Cuando usted inicia la sesión en domain.com, que va a ser realmente accounts.domain.com sitio, entonces obtendrá una cookie con la identificación única para su navegador y luego será redirigido a la página de inicio de sesión posterior a domain.com (es decir, domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>). la página de inicio se comunicará con el accounts.domain.com, solicitándolo con la ID del navegador. Si la transacción está bien, obtendrá una cookie de inicio de sesión de domain.com.

A continuación, en cada dominio (domain.com, something.com y another.com) se realizará una redirección inicial a accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>.Debido a que volvemos a casa (ya hemos iniciado sesión en accounts.domain.com), seremos redireccionados de nuevo en nuestra página de destino (<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>) y a partir de este punto es lo mismo que la parte con el inicio de sesión. Estamos vagabundeados a otro dominio (sin que el usuario lo sepa, ya que los navegadores no suelen mostrar la página redirigida hasta que pasa la sección de envío de encabezados/recepción (navegador)).

En caso de que no haya ningún inicio de sesión activo, el sitio guardará este "inicio de sesión negativo" en la sesión y no intentará volver a iniciar sesión (hasta que intentemos iniciar sesión o cargar otro dominio).

Cuestiones relacionadas