¿Cómo administrar las contraseñas en un entorno de varios inquilinos?

3

Estoy creando una aplicación multiusuario en un modelo de base de datos compartida . Me gustaría cifrar los datos confidenciales para que solo un inquilino en particular pueda tener acceso a sus datos. ¿Cuál es el mejor modo para mantener / proporcionar contraseñas y dónde debo guardarlas en un entorno de múltiples inquilinos?

    
pregunta Dan 20.06.2013 - 02:41
fuente

1 respuesta

2

La autenticación de un usuario en una aplicación multi-tenant no es fundamentalmente diferente de la autenticación en una aplicación de un solo inquilino. Antes de saber quién es ese usuario y qué permisos, capacidades o roles tiene, no sabe qué subconjunto de datos debería tener disponible. Una vez autenticado, puede limitar los datos expuestos a él, utilizando los controles que admita su aplicación (por ejemplo, filtrado, permisos, cifrado).

Un sistema multi-tenant tiene las mismas necesidades, excepto que ahora el usuario pertenece a una organización, y todos los datos en su base de datos están particionados alrededor de esa organización. Es posible que desee tener protecciones más fuertes entre los inquilinos que entre los inquilinos, pero todavía es cuestión de descubrir quién es el usuario y qué datos puede acceder.

El artículo que vinculó sugiere un enfoque, utilizando el cifrado como parte de su defensa en profundidad:

  

Cuando un usuario final inicia sesión, la aplicación utiliza la suplantación para acceder a la base de datos utilizando el contexto de seguridad del inquilino, que otorga al proceso de la aplicación acceso a la clave privada del inquilino. La aplicación (aún suplantando al inquilino, por supuesto) puede usar la clave privada del inquilino para descifrar la clave simétrica del inquilino y usarla para leer y escribir datos.

Pero observe que esto supone que el usuario ya ha iniciado sesión (y, por lo tanto, se autentica con el sistema); antes de que eso suceda, no hay forma de que el sistema sepa a qué inquilino pertenece. Por supuesto, a menos que todos los usuarios del mismo inquilino hayan utilizado algún tipo de credencial para autenticar al inquilino, luego deben usar sus credenciales individuales para autenticarse, pero esto abre otra lata de gusanos.

Entonces, mi sugerencia sería tener una única tabla de base de datos para todos los usuarios, donde un nombre de usuario (o par tenantname-username) y las credenciales asociadas (hash de contraseña, clave pública, clave OTP, etc.) autentican al usuario y luego usa el información sobre "quién es el usuario" y "a qué inquilino pertenece" para desbloquear el acceso al resto de los datos. Y asegúrese de que nadie excepto el proveedor de servicios tenga acceso a los contenidos de esa tabla.

    
respondido por el mgibsonbr 20.06.2013 - 04:54
fuente

Lea otras preguntas en las etiquetas