Tengo dos aplicaciones web diferentes creadas con ASP.net MVC. Es posible que estas dos aplicaciones no se estén ejecutando en el mismo servidor ni en el mismo dominio.
Me gustaría que si un usuario inicia sesión en uno de ellos, automáticamente debería iniciar sesión en el otro. Lo mismo debería funcionar con el cierre de sesión.
¿Cuál crees que es la mejor solución? ¿Conoces algún código de ejemplo?
¡Gracias!
--- EDITADO CON MAS INFO ---
Escenario de caso de uso:
El usuario tiene la aplicación web A abierta en una pestaña, y en algún punto de la aplicación hay un enlace que redirige al usuario a la aplicación web B. Si ha iniciado sesión en A , me gustaría mostrarle la página completa y, si no lo está, redirigirlo al formulario de inicio de sesión.
Por qué necesito hacerlo:
Las aplicaciones A y B ya están construidas. Aparentemente, la única forma de acceder a B es haciendo clic en el enlace ubicado en A , que solo se muestra si ha iniciado sesión previamente. El problema es que si conoces la URL de alguna página de B (son largas y complejas, pero aún así) puedes escribirla en el navegador y acceder a B , lo que significa un problema de seguridad.
Mi respuesta puede no ser la mejor, sin embargo, puede usar algún mecanismo complicado como
Supongo que no puede comunicarse entre las aplicaciones A y B utilizando ninguna tienda compartida. (Esto podría permitir alguna implementación de sesión compartida).
La forma más estándar de la industria (OpenID Connect) de hacerlo es como algunas de las otras respuestas han insinuado. Trataré de dar más detalles para llevarlo por el camino correcto.
Tanto la aplicación A como la B deben transmitir el proceso de autenticación a un tercero de confianza (que podría estar alojado en A, B o en una aplicación diferente por completo). Llamémoslo C
Cuando el usuario llega a A o B (sin importar que B tenga URL extrañas y complicadas, siempre puede marcarlas como favoritas), su solicitud debe contener un token de autorización. Si no es así, no está autenticada y sería redirigida a C y se le presentaría algún mecanismo de inicio de sesión, por ejemplo, formulario de usuario/contraseña.
Después de un inicio de sesión exitoso, se la redirige de nuevo a A/B (dependiendo de su procedencia) para completar lo que estaba haciendo con el token de autenticación. Ahora, con el token de autenticación presente, está autenticada.
Si se autentica con A y luego se redirige a B, esta redirección también debe contener el token, B sabría cómo confiar en ese token.
Ahora, si él simplemente abre una nueva pestaña, B no vería ningún token, por lo que sería redirigida a C, solo para ser redirigida de regreso (ella ya está autenticada, ¿recuerdas?) a B con el token, y ahora todo es bueno.
Lo que describí es un flujo común usando OpenID connect, y si usa .net, realmente sugiero usar IdentityServer de Thinktecture para hacer el trabajo duro por usted y ser su "C".
Otra opción es pagar por dicha "C" alojada como una aplicación SaaS: consulte Auth0
Puede implementar OAuth en un proyecto. Puede obtener más ayuda aquí: http://www.openauthentication.org/about