Preocupación por la seguridad de la implementación del inicio de sesión único

2

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:

  1. El usuario inicia sesión en la aplicación A
  2. El usuario hace clic en el enlace "Ir a la aplicación B"
  3. 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
  4. 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.
  5. La aplicación B devuelve una llamada a la aplicación A junto con el token y el mensaje "SUCESS".
  6. 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.
  7. 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?

    
pregunta DemCodeLines 22.04.2018 - 04:57
fuente

1 respuesta

1

Como los colegas han señalado, su lógica SSO es sólida aquí. Para mejorarlo un poco y hacerlo más rápido quizás, puede terminar en Paso 3 siempre que use la clave privada en el Servidor B para validar el JWT generado por el Servidor A.

Por supuesto, estamos asumiendo algunas cosas aquí en cada paso, por ejemplo:

  1. Cifrado = > asumimos que todo el sistema está utilizando un mecanismo de encriptación robusto para pasar estos tokens JWT de un lado a otro y están a salvo de miradas indiscretas.

  2. El servidor A y el servidor B validan la entrada entre ellos; en otras palabras, el servidor B no confía implícitamente en que el servidor A siempre enviará tokens JWT, porque las solicitudes / respuestas pueden ser interceptadas.

  3. Ataques de denegación de servicio: el sistema puede defenderse de estos ataques.

  4. Velocidad: suficientemente rápida

  5. Alerta al administrador de otros ataques de seguridad

respondido por el geforceGTX480 26.09.2018 - 22:19
fuente

Lea otras preguntas en las etiquetas