Estoy intentando crear un sistema de inicio de sesión único que conecte las aplicaciones A a B y B a A. Desafortunadamente, la opción de usar OpenID / OAuth / SAML no es posible en este momento, por lo que estoy creando una solución básica. , así es como va:
- El usuario inicia sesión en la aplicación A
- El usuario hace clic en el enlace "Ir a la aplicación B"
- El servidor para la aplicación A genera un token JWT que contiene la identificación del usuario y la fecha de caducidad, guarda un resultado de hash de esta cadena en una ubicación compartida (como Redis) y redirige al punto final de la aplicación B junto con el token
- La aplicación B contiene el token que recibió y comprueba si coincide con el hash que está en la base de datos. Si coincide, entonces verifica si el token ha caducado y rechaza / acepta la solicitud según la evaluación.
- La aplicación B devuelve una llamada a la aplicación A junto con el token y el mensaje "SUCESS".
- La aplicación A vuelve a marcar el token y comprueba la base de datos para ver si los dos hashes coinciden. Si lo hacen, entonces la aplicación A emite un token de autenticación temporal para el cliente.
- Para todas las solicitudes futuras a la aplicación B, la aplicación A pasa a lo largo del token temporal (que la aplicación B valida contra una clave secreta) y la aplicación B concede la solicitud (si no caducó y la rechaza si caduca)
Este es el enfoque que se ha implementado y es funcional, pero quería saber qué tan segura es la lógica. ¿Ve algún problema de seguridad evidente con esta implementación?