auth django authentication active-directory ldap authorization

django - auth - Administrar bases de datos de usuarios grandes para inicio de sesión único



django ldap (5)

¿Cómo implementarías un sistema con los siguientes objetivos:

  • Administre la autenticación, la autorización para cientos de miles de usuarios existentes actualmente estrechamente integrados con una aplicación de un proveedor externo (Queremos convertir a estos usuarios en algo que administramos y hacer que nuestras aplicaciones trabajen en su contra, además nuestros proveedores de terceros trabajan en contra de esto).
  • Administrar información de perfil vinculada a esos usuarios
  • Se debe poder acceder desde cualquier número de aplicaciones web en casi cualquier plataforma (Windows, * nix, PHP, ASP / C #, Python / Django, etcétera).

Aquí algunas implementaciones de muestra:

  • Servidor LDAP / AD para administrar todo. Use un esquema personalizado para todos los datos de perfil. Todo puede autenticarse contra LDAP / AD y podemos almacenar todo tipo de ACL y datos de perfil en un esquema personalizado.
  • Utilice LDAP / AD solo para autenticación, vincule a los usuarios de LDAP a un servidor de autorización / perfil más robusto utilizando algún tipo de base de datos tradicional (MSSQL / PostgreSQL / MySQL) o DB basado en documentos (CouchDB, SimpleDB, etc.). Use LDAP para autorización, luego presione DB para obtener información más avanzada.
  • Use una base de datos tradicional (Relacional o Documento) para todo.

¿Alguno de estos tres es el mejor? ¿Existen otras soluciones que se ajusten a los objetivos anteriores y que sean más fáciles de implementar?

** Debo añadir que casi todas las aplicaciones que se autenticarán en la base de datos de usuarios estarán bajo nuestro control. Los únicos que quedan fuera serán las aplicaciones de las que estamos eliminando la base de datos de usuarios actual y quizás 1 o 2 más. Nada tan amplio como para necesitar un servidor openID.

También es importante saber que muchos de estos usuarios han tenido estas cuentas durante 5-8 años y conocen sus inicios de sesión y contraseñas, etcétera.


Existe una diferencia entre la autenticación y la autorización / creación de perfiles, por lo que no los fuerce necesariamente en una sola herramienta. Su segunda solución de uso de LDAP para autenticación y un DB para autorización parece más sólida ya que los datos LDAP son controlados por el usuario y el DB sería controlado por un administrador. Lo último probablemente se transformaría en estructura y complejidad a lo largo del tiempo, pero la autenticación es solo esa autenticación. La separación de estas funciones resultará más manejable.


Si tiene una infraestructura ActiveDirectory existente, ese será el camino a seguir. Esto será particularmente ventajoso para las empresas que ya tienen servidores de Windows configurados para la autenticación. Si este es el caso, me inclino por su primer punto de viñeta en "implementaciones de muestra".

De lo contrario, será un lanzamiento entre AD y las opciones LDAP de código abierto.

Puede que no sea viable implementar su propio esquema de autenticación para inicio de sesión único (especialmente teniendo en cuenta la gran cantidad de documentación e integración que podría tener que hacer), y obviamente no agrupe su servidor de autenticación con ninguna de las aplicaciones que se ejecutan en su sistema (ya que desea que sea independiente de la carga de tales aplicaciones).

¡Buena suerte!


Siempre puede implementar su propio servidor OpenID . Ya hay una biblioteca de Python para OpenID, por lo que debería ser bastante fácil.

Por supuesto, no necesita aceptar inicios de sesión autorizados por otros servidores en sus aplicaciones. Acepte las credenciales autorizadas solo por su propio servidor.

Editar: he encontrado una implementación del protocolo de servidor OpenID en Django .

Edit2: hay una ventaja obvia al implementar OpenID para sus usuarios. Podrán iniciar sesión en con sus inicios de sesión :-)


Tenemos diferentes sitios con alrededor de 100k usuarios y todos trabajan con bases de datos normales. Si la mayoría de las aplicaciones pueden acceder al archivo db, puede usar esta solución.


Utilice LDAP / AD solo para autenticación, vincule a los usuarios de LDAP a un servidor de autorización / perfil más robusto utilizando algún tipo de base de datos tradicional (MSSQL / PostgreSQL / MySQL) o DB basado en documentos (CouchDB, SimpleDB, etc.). Use LDAP para autorización, luego presione DB para obtener información más avanzada.