2011-06-19 32 views
9

Tengo problemas con el módulo de autenticación de LDAP django-auth-ldap. Estoy utilizando el ejemplo de configuración de este sitio: http://packages.python.org/django-auth-ldap/Crear usuarios en LDAP utilizando Django

me gustaría hacer dos cosas:

1) autentificar contra LDAP: Por el momento, mi base de datos LDAP está vacía, No añadí cualquier cosa, de hecho, no sé cómo hacerlo. Sin embargo, aún puedo iniciar sesión en mi sitio basado en django con mis inicios de sesión/contraseñas anteriores almacenados en mi base de datos django. ¿Porqué es eso? En caso de no ser ignorado, ¿no debería ocurrir el proceso de inicio de sesión con el usuario/contraseñas LDAP? En otras palabras, si mi base de datos LDAP está vacía, ¿no deberían fallar todos mis inicios de sesión? Sin embargo, no es así, tengo la impresión de que django ignora por completo el módulo django-auth-ldap.

2) Sincronice LDAP con django (y no al revés) No quiero usar una base de datos de usuario existente para autenticar en contra. Quiero poder crear nuevos usuarios en Django y propagar estos usuarios a LDAP para que puedan ser compartidos por otros servicios, en mi caso, un servidor de Openfire. ¿Cómo se hace eso con django-auth-ldap?

Aquí es el copiar/pegar de mi configuración:

# Baseline configuration. 
AUTH_LDAP_SERVER_URI = "127.0.0.1" 

AUTH_LDAP_BIND_DN = "cn=admin,dc=nodomain" 
AUTH_LDAP_BIND_PASSWORD = "admin" 
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=nodomain", 
    ldap.SCOPE_SUBTREE, "(uid=%(user)s)") 

# Set up the basic group parameters. 
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=django,ou=groups,dc=nodomain", 
    ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)" 
) 
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") 

# Only users in this group can log in. 
AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=django,ou=groups,dc=nodomain" 

# Populate the Django user from the LDAP directory. 
AUTH_LDAP_USER_ATTR_MAP = { 
    "first_name": "givenName", 
    "last_name": "sn", 
    "email": "mail" 
} 

AUTH_LDAP_PROFILE_ATTR_MAP = { 
    "employee_number": "employeeNumber" 
} 

AUTH_LDAP_USER_FLAGS_BY_GROUP = { 
    "is_active": "cn=active,ou=django,ou=groups,dc=nodomain", 
    "is_staff": "cn=staff,ou=django,ou=groups,dc=nodomain", 
    "is_superuser": "cn=superuser,ou=django,ou=groups,dc=nodomain" 
} 

AUTH_LDAP_ALWAYS_UPDATE_USER = True 

AUTH_LDAP_FIND_GROUP_PERMS = True 

AUTH_LDAP_CACHE_GROUPS = True 
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600 


# Keep ModelBackend around for per-user permissions and maybe a local 
# superuser. 
AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

Lo siento, no saben mucho sobre LDAP, acabo de instalar esta mañana así que mi pregunta puede sonar ingenuo. Solo necesito una base de usuarios centralizada que pueda actualizar y compartir entre varios servidores.

Muchas gracias por su ayuda.

Respuesta

7

1) la configuración tiene dos backends de autenticación instalados:

AUTHENTICATION_BACKENDS = ('django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend',)

Django intentará autenticar el uno contra el otro hasta que encuentra uno que tiene éxito (o hasta que se agote). Como su directorio LDAP está vacío, presumiblemente siempre fallará, por lo que ModelBackend siempre tendrá una oportunidad. Si no desea autenticar usuarios contra la base de datos de usuarios de Django, debe eliminar ModelBackend de la lista.

2) django-auth-ldap no propaga a los usuarios de Django hasta LDAP, sino al revés. Está diseñado para permitir que las implementaciones de Django se autentiquen contra los servicios LDAP existentes que se administran por separado. Para manipular los contenidos de un directorio LDAP desde una aplicación Django, es posible que desee consultar django-ldapdb.

Cuestiones relacionadas