Estoy creando una serie de aplicaciones web conectadas a un único punto de autenticación. Básicamente, un usuario intenta acceder a un sitio, si no se autentica, se lo redirige a la página de inicio de sesión del sistema de autenticación central. Una vez que inician sesión correctamente, son redirigidos a su aplicación. A partir de ese momento, si acceden a cualquier otra aplicación, iniciarán sesión automáticamente.
Un par de detalles adicionales: 1) todas las aplicaciones se ejecutarán en el mismo dominio, por lo que puedo usar cookies de dominio, lo que facilita las cosas; 2) los usuarios pueden tener acceso a algunas aplicaciones y no a otras, por lo que debe tenerse en cuenta; 3) el usuario debe poder recuperar los permisos específicos de cada aplicación.
He implementado algo, pero no estoy 100% contento con eso. En este momento, esto es lo que tengo: 1) la aplicación web verifica la existencia de una sesión (específica de la aplicación) y una cookie que es un token JWT que se envió desde el sistema de autenticación centralizado; 2) si la cookie no existe, redirijo a la página de inicio de sesión en el sistema de autenticación; 3) una vez que el usuario inicia sesión, es redirigido a su aplicación pasando un token JWT; 4) la aplicación verifica el token a través de una llamada REST API al sistema de autenticación (hacer que estas llamadas REST API se basen en un token de acceso separado), si es válido, el token JWT se guarda como una cookie y se inicia una sesión con el usuario conectado; 5) si la sesión de la aplicación caduca, verifica si la cookie existe y si es así, la aplicación hace lo mismo que en el paso 4, verifica el token y reinicia la sesión; 6) al cerrar sesión, el sistema simplemente elimina la cookie, asegurar que el usuario haya cerrado la sesión de todas las aplicaciones; 7) si el token caduca, la aplicación usa el token caducado para solicitar uno nuevo, donde la firma del token y otros reclamos se validan antes de emitir uno nuevo, lo único que no se valida es el reclamo de vencimiento.
Para aclarar, se utiliza la existencia de una sesión específica de la aplicación para que no tenga que seguir haciendo llamadas REST API constantemente para verificar el token. Pero dado que el token se verificó una vez, ¿sería seguro usar esa cookie como indicador de que hay una sesión válida?
Una cosa de la que no estoy seguro es que mi token necesita tener algo que indique para qué aplicación es porque se pueden hacer otras llamadas a la API REST usando el token para obtener algunos recursos específicos de la aplicación. Pero si obtengo un token para app1 y luego inicio sesión en app2, app2 dependerá de la cookie generada por app2. Parece que me gustaría tener dos tokens, uno que se pueda almacenar como una cookie de dominio para indicar que el usuario está autenticado, y otro que en realidad sería específico de la aplicación y se puede usar para hacer llamadas a la API REST para otra aplicación. recursos específicos
¿Estoy complicando demasiado esto o mi línea de pensamiento coincide con lo que otros están viendo / haciendo? ¿O hay una forma más elegante de hacer esto? He pensado implementar algo como Open ID, pero parece un poco exagerado para nuestras necesidades. Quiero que esto sea lo más simple posible para poder documentar el proceso y que otros equipos de desarrolladores puedan desarrollar aplicaciones que se conecten al sistema de autenticación sin necesitar demasiada ayuda.
fuente