Estoy tratando con un proveedor externo que claramente no comprende la seguridad: para acceder a su API desde mi back-end, tengo que proporcionar el ID / usuario / contraseña del usuario final para el servicio de terceros con cada lote de solicitudes .
Estoy luchando con ellos para al menos implementar algún tipo de autenticación basada en token revocable, pero mientras tanto tengo que lidiar con esto (al menos usan HTTPS ... sheesh).
Tengo que autenticarme con bastante regularidad para sincronizar los datos, y la sincronización debe realizarse sin la intervención del usuario final, por lo que básicamente significa que el BE debe almacenar las credenciales en un formato reversible. No soy lo suficientemente ingenuo como para almacenarlo en texto plano, pero incluso si lo cifro en la base de datos, la clave no estará muy lejos de la cerradura, por así decirlo.
Si no tuvieran almacenada una tonelada métrica de datos confidenciales, estaría menos preocupado, pero definitivamente es un dato que vale la pena asegurar. ¿Algún consejo?
Notas:
- Las contraseñas se almacenarían en una base de datos distribuida. La base de datos en sí es razonablemente segura. La única posibilidad real de una violación sería una filtración de las credenciales de uno de los desarrolladores para acceder directamente a los datos, o un contratiempo de programación serio .
- La API del proveedor no permite cambiar la contraseña mediante programación, por lo que la rotación de contraseñas no es una opción.
El acceso al código fuente del back-end se puede bloquear bastante bien. ¿Sería razonable almacenar una clave privada en la fuente y llamarla un día?