Estoy configurando un servidor HTTP doméstico que puede enviar y recibir datos JSON a / desde diferentes clientes (aplicaciones de Android y iPhone).
Me gustaría permitir el acceso solo a ciertos usuarios y estoy considerando usar un mecanismo simple de nombre de usuario / contraseña, ya que la configuración de certificados de clientes parece un poco excesivo para este pequeño proyecto.
Por supuesto, no puedo enviar contraseñas claras desde el cliente al servidor en HTTP simple, de lo contrario, cualquier persona con wireshark / tcpdump instalado podría leerlo. Entonces, estoy pensando en el siguiente mecanismo:
- El servidor HTTP se puede configurar como servidor HTTPS
- El servidor también tiene una base de datos de nombre de usuario / contraseña (las contraseñas se pueden guardar con bcrypt)
- El cliente abre la conexión HTTPS, autentica el servidor (por lo que se necesita un certificado de servidor) y después de intercambiar la clave maestra, la conexión debe estar cifrada.
- El cliente envía el nombre de usuario / contraseña en claro al servidor
- El servidor ejecuta bcrypt en la contraseña y la compara con la almacenada en la base de datos
¿Hay algún problema con este tipo de configuración? La contraseña debe ser segura ya que se envía en una conexión cifrada.