¿Cómo comprobar si existe una cookie aunque haya sido creada en otra aplicación? (usando JS o C#)

Tengo varias aplicaciones y una de ellas es una aplicación central que gestiona la autenticación, y donde un LogOn la página se importa como un IFrame a las otras aplicaciones.

Cuando el userName y password son correctos, creo una cookie llamada userInfo.

Ahora, en la aplicación actual, quiero verificar si la cookie de userInfo existe Creo que debería comprobar que existe en el navegador (en el lado del cliente).

Debe ser posible, entonces, ¿cómo puedo hacerlo?

Gracias de antemano.

preguntado el 12 de junio de 12 a las 14:06

Parece que desea implementar el inicio de sesión único. ¿Todas las aplicaciones residen en el mismo dominio o usan el mismo dominio si se accede a través de un subdominio? -

@DanLister No todas las aplicaciones están en el mismo dominio. Debe haber una forma de saberlo tal vez a través de una url o algo... -

Esto suena como un enorme riesgo de seguridad para mí. No DESEA que una cookie de un dominio sea legible por cualquier otro dominio arbitrario. -

Estoy de acuerdo con stephen.vakil. Para aplicaciones de múltiples dominios, necesitará una aplicación central para administrar la autenticación. Algo como ADFS haría el truco. -

@DanLister Eso es exactamente lo que tengo: una aplicación central que administra la autenticación. Muestro la misma página de inicio de sesión en las otras aplicaciones. Pero no sé cómo la aplicación actual tiene una forma de saber si el nombre de usuario y la contraseña eran buenos. -

1 Respuestas

Las cookies no se pueden compartir entre dominios. Si tus aplicaciones no están alojadas en el mismo dominio tienes que olvidarte de esto. No funcionará porque los navegadores (por obvias razones de seguridad) no envían cookies entre dominios. Hay otras formas de implementar el inicio de sesión único entre dominios (consulte la segunda parte de mi respuesta).

Ahora supongamos que sus aplicaciones están en el mismo dominio y tiene varias aplicaciones distribuidas en diferentes subdominios del dominio raíz:

  • login.foo.com
  • app.foo.com
  • xxx.foo.com

y desea compartir la autenticación entre esos subdominios. Todo lo que tiene que hacer es especificar establecer el domain propiedad en su web.config al dominio raíz:

<authentication mode="Forms">
  <forms
    loginUrl="https://login.foo.com"
    requireSSL="true"
    protection="All"
    timeout="120"
    domain="foo.com"
    slidingExpiration="false"
    name="sso" />
</authentication>

La misma configuración se debe aplicar a la web.config de todas las aplicaciones. Y eso es prácticamente todo lo que necesitas hacer. Una vez que el usuario se autentique en uno de los subdominios, se autenticará automáticamente en los demás gracias al hecho de que las cookies se pueden compartir entre subdominios.


Si desea lograr un inicio de sesión único entre dominios, tendrá que adoptar un enfoque diferente. Podrías usar el mismo llaves de máquina entre las diferentes aplicaciones para cifrar el token de autenticación. Aquí están los pasos:

  1. El usuario navega a https://foo.com y se le presenta una pantalla de inicio de sesión porque aún no está autenticado en este dominio.
  2. El usuario se autentica y se emite una cookie de autenticación válida para el foo.com dominio.
  3. Ahora el usuario debe ir a https://bar.com y autenticarse automáticamente en este dominio. En alguna página de https://foo.com puede crear un formulario que contenga el valor de la cookie de autenticación que se publicará:

    <form action="https://bar.com" method="post">
        <input type="hidden" name="token" value="PUT THE VALUE OF THE AUTHENTICATION COOKIE HERE" />
        <button type="submit">Go to bar.com</button>
    </form>
    
  4. El usuario envía la cookie de autenticación a la bar.com. La secuencia de comandos que recibe este envío de formulario lee el valor del token de autenticación que se publicó y utiliza el FormsAuthentication.Decrypt método para descifrar el ticket de autenticación y leer el nombre de usuario. Dado que ambas aplicaciones en foo.com y bar.com use las mismas claves de máquina, el boleto que fue encriptado en foo.com será descifrado con éxito por bar.com
  5. El guión en bar.com habiendo extraído el nombre de usuario autenticado del token, emite una cookie de autenticación de formularios válida en bar.com usando el FormsAuthentication.SetAuthCookie método.
  6. El usuario ahora está autenticado en bar.com

Toda la seguridad de este modelo se basa en el hecho de que se utiliza SSL cuando se hace POST al token de autenticación de formularios desde foo.com a bar.com por lo que el token no puede ser capturado por un Hombre en el medio y que ambas aplicaciones comparten las mismas claves de máquina para cifrar y descifrar esos tokens.

Respondido el 12 de junio de 12 a las 16:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.