Enlace del servidor de correo con la base de datos de la aplicación

0

Tengo una aplicación web que se ejecuta en node.js, respaldada por una base de datos MongoDB que almacena datos de usuarios, etc. Me gustaría ofrecer a mis usuarios una cuenta de correo electrónico, así que configuré un servidor de correo con Postfix , dovecot, etc ... Mi problema es que me gustaría vincular las dos bases de datos de usuarios. Actualmente tengo configurado Postfix y Dovecot para usar usuarios virtuales almacenados en una base de datos mysql (realmente MariaDB), y esto funciona bien (puedo acceder y enviar correos electrónicos a través de IMAP, etc.). Sin embargo, quiero que mis usuarios puedan usar la misma contraseña para IMAP que para iniciar sesión en la aplicación web. Estoy feliz de escribir una api de PHP para crear usuarios en el servidor de correo, etc., pero mi problema es cómo manejar las contraseñas. Como yo lo veo, hay dos opciones;

  1. Puedo transmitir las contraseñas de texto sin formato de mi servidor de aplicaciones web a mi servidor de correo cuando un usuario se registra o cambia la contraseña. Obviamente, esto se incluiría en el servidor de correo y se almacenaría en la base de datos mysql, y en el servidor de aplicaciones y se almacenaría en la base de datos MongoDB. Esto me parece mal de alguna manera: transmitir una contraseña de texto sin formato en dos saltos como ese.
  2. Puedo transmitir las contraseñas con hash del servidor de aplicaciones al servidor de correo y almacenarlas sin volver a marcar. Nuevamente, esto se siente bastante poco fiable, ya que, desde la perspectiva del servidor de correo, está aceptando contraseñas y almacenándolas en texto claro.

¿Existen otras opciones para permitir que mis usuarios inicien sesión en ambos servidores con las mismas credenciales? ¿Qué problemas de seguridad existen con las dos opciones que he pensado anteriormente?

    
pregunta macleos 13.07.2018 - 18:19
fuente

1 respuesta

1

También hay una tercera opción a considerar: un marco de autenticación.
En lugar de tener credenciales de usuario separadas para la base de datos y el servidor de correo que deben mantenerse sincronizados, tenga un servicio de autenticación central al que se aplacen la base de datos y los servidores de correo cuando un usuario intenta autenticarse. Hay varias opciones para elegir, pero probablemente querrá comenzar con las cosas que sus aplicaciones admiten actualmente. De lo que puedo reunir, tanto MongoDB como postfix son compatibles con LDAP y SASL, por lo que esas serían dos opciones a considerar.

En cuanto a los problemas de seguridad de los métodos que sugirió: incluso si se resolvió la transmisión segura de contraseñas, todavía tiene que lidiar con la sincronización. Si se produce un error en un momento inoportuno (por ejemplo, un usuario que cambia su contraseña mientras Postfix no está disponible), terminará con las credenciales no coincidentes en cada servicio. Podría arreglarse, sí, pero comparar las credenciales en los dos servidores implicaría transmitir al menos algunos datos confidenciales. En una situación más nefasta, considere lo que sucedería si las credenciales se desincronizaran cuando un usuario fue prohibido. Podrían terminar reteniendo el acceso parcial a los recursos a los que no deberían tener acceso en absoluto.

    
respondido por el Mr. Llama 13.07.2018 - 19:26
fuente

Lea otras preguntas en las etiquetas