Tengo el requisito de implementar el inicio de sesión entre dominios para dos aplicaciones web (APP1 y APP2) para que un usuario pueda acceder a APP2 una vez que haya iniciado sesión en APP1. APP2 necesita conocer un ID del usuario que ha iniciado sesión en APP1. He encontrado una solución pero no estoy seguro de que sea la mejor manera de hacerlo. ¿Podría por favor echar un vistazo a esta solución y señalar posibles vulnerabilidades o darme algunos consejos sobre cómo hacerlo de una mejor manera? Aquí está la solución:
-
APP1 tiene un enlace a la APP2 en algún lugar del sitio web. El enlace contiene un contador de inicio de sesión que se genera por el servidor del APP1, es decir, enlace
-
Un token de inicio de sesión es un texto simple cifrado mediante un algoritmo de clave simétrica como AES y una contraseña de cifrado que solo es conocida por APP1 y APP2. Contiene la siguiente información: ID de usuario, dirección IP, marca de tiempo, clave secreta, es decir. 00001,87.143.203.12,1399725213, clave secreta
-
La APP2 recibe la solicitud, descifra el token de inicio de sesión utilizando la contraseña de cifrado y comprueba lo siguiente:
- referenciador HTTP: debe coincidir con la URL del servidor APP1
- dirección IP
- clave secreta: ambas aplicaciones comparten la misma clave secreta (no es la misma que la contraseña de cifrado) para verificar que la solicitud proviene de la APP1
- si el token de inicio de sesión se ha utilizado o no.
-
APP2 garantiza que un token de inicio de sesión se puede usar solo una vez, por lo que no será posible robar un token de inicio de sesión y usarlo para acceder a APP2 desde otra computadora.