2011-06-19 18 views
9

Mam problemy z modułem uwierzytelniającym LDAP django-auth-ldap. Używam przykładową konfigurację z tej strony: http://packages.python.org/django-auth-ldap/Tworzenie użytkowników w LDAP przy użyciu Django

Chciałbym zrobić dwie rzeczy:

1) Authentificate przeciwko LDAP: W tej chwili moja baza danych LDAP jest pusta, ja nie dodawać cokolwiek do tego, w rzeczywistości nie wiem jak. Jednak nadal jestem w stanie zalogować się w mojej witrynie opartej na django z moimi starymi logami/hasłami przechowywanymi w mojej bazie danych django. Dlaczego? Czy nie należy tego zignorować, czy proces logowania nie powinien się odbywać z użytkownikiem/hasłami LDAP? Innymi słowy, jeśli moja baza danych LDAP jest pusta, czy nie powinno się polegać na każdym moim logowaniu? Jednak nie ma, mam wrażenie, że django całkowicie ignoruje moduł django-auth-ldap.

2) Synchronizuj LDAP z django (a nie odwrotnie) Nie chcę używać istniejącej bazy danych użytkownika do uwierzytelniania. Chcę móc tworzyć nowych użytkowników w Django i propagować tych użytkowników do LDAP, aby mogli być udostępniani przez inne usługi, w moim przypadku serwer openfire. Jak to zrobić z django-auth-ldap?

Oto copy/paste mojej konfiguracji:

# 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', 
) 

Niestety nie wiem zbyt wiele o LDAP, Właśnie zainstalowałem go dziś rano, więc moje pytanie może wydawać się naiwne. Potrzebuję tylko scentralizowanej bazy użytkowników, którą będę mógł aktualizować i udostępniać między kilkoma serwerami.

Dziękuję bardzo za pomoc.

Odpowiedz

7

1) Konfiguracja ma dwa bazami uwierzytelniania zainstalowane:

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

Django będzie próbował uwierzytelnić każdego z nich po kolei, aż znajdzie taki, który powiedzie (lub dopóki nie skończy). Ponieważ twój katalog LDAP jest pusty, prawdopodobnie zawsze zawiedzie, więc ModelBackend zawsze dostanie strzał. Jeśli nie chcesz uwierzytelniać użytkowników w bazie danych użytkowników Django, musisz usunąć ModelBackend z listy.

2) django-auth-ldap nie propaguje użytkowników Django do LDAP, tylko na odwrót. Został zaprojektowany w celu umożliwienia wdrożeń Django w celu uwierzytelnienia w istniejących usługach LDAP zarządzanych osobno. Aby manipulować zawartością katalogu LDAP z aplikacji Django, możesz spojrzeć na numer django-ldapdb.