Tengo varias aplicaciones web que se ejecutan en varios dominios. Quiero implementar el inicio de sesión único, de modo que un usuario inicie sesión una vez para acceder a todas las aplicaciones.
¿Cómo debo implementar esto? Todas las aplicaciones usan el backend de NodeJS.
Los indicadores generales en la dirección correcta son bienvenidos.
Como sus aplicaciones se ejecutan en diferentes dominios, no puede compartir cookies entre las APLICACIONES que se ejecutan en la máquina del cliente para validar al usuario. Entonces, de alguna manera, la información debe compartirse en el extremo del servidor.
La solución más simple que se me ocurre es:
Tener una sesión compartida para todos los servidores.
Tenga un dominio de autenticación específico y redirija a los usuarios allí cuando sea necesaria la autenticación. Autentique al usuario allí y configure una cookie de sesión o un token como desee.
Cada vez que alguna de sus aplicaciones necesite autenticación, rediríjala al dominio de autenticación. La cookie de autenticación se enviará al dominio de autenticación, así como al dominio de referencia. Al ver que ya está validado, el servidor de autenticación puede redirigirlo a la aplicación original con el ID de sesión adecuado, que se establecerá como cookie para ese dominio.
Si no se autentica, se le pedirá al usuario que se autentique en el servidor de autenticación y luego se realizará la redirección.
Con pequeños cambios, puede lograr esto usando tokens y sin necesidad de sesiones compartidas.
Valide los estados adecuadamente antes de implementarlo. Más estados en su mecanismo significan más posibilidades de errores y posibles ataques.
Considere mover sus aplicaciones al mismo subdominio. Si el mecanismo de autenticación es el mismo, todos saben que todas las aplicaciones pertenecen a la misma empresa. También será más fácil para las personas recordar varios subdominios en el mismo dominio en lugar de recordar todos los dominios diferentes.
El proyecto más usado es http://passportjs.org/ que es prácticamente el único que uso, tiene excelentes conectores para soluciones locales como ADFS y de terceros como google, facebook.