2011-06-19 15 views
9

Tôi đang gặp sự cố với mô-đun xác thực LDAP django-auth-ldap. Tôi đang sử dụng cấu hình mẫu từ trang web này: http://packages.python.org/django-auth-ldap/Tạo người dùng trong LDAP bằng cách sử dụng Django

Tôi muốn làm hai việc:

1) Authentificate chống LDAP: Đối với thời điểm này, cơ sở dữ liệu LDAP của tôi là trống rỗng, tôi không thêm bất cứ điều gì với nó, trên thực tế tôi không biết làm thế nào để. Tuy nhiên, tôi vẫn có thể đăng nhập vào trang web dựa trên django của tôi với thông tin đăng nhập/mật khẩu cũ của tôi được lưu trữ trong cơ sở dữ liệu django của tôi. Tại sao vậy? Không nên bỏ qua điều này, thay vào đó, quy trình đăng nhập có xảy ra với người dùng/mật khẩu LDAP không? Nói cách khác, nếu cơ sở dữ liệu LDAP của tôi trống, không phải mỗi lần đăng nhập của tôi không thành công? Tuy nhiên, nó không, tôi có ấn tượng rằng django hoàn toàn bỏ qua các mô-đun django-auth-ldap.

2) Đồng bộ hóa LDAP với django (và không phải theo cách khác) Tôi không muốn sử dụng cơ sở dữ liệu người dùng hiện có để xác thực lại. Tôi muốn để có thể tạo người dùng mới trong Django và tuyên truyền những người dùng này để LDAP để họ có thể được chia sẻ bởi các dịch vụ khác, trong trường hợp của tôi, một máy chủ openfire. Làm thế nào để bạn làm điều đó với django-auth-ldap?

Đây là copy/paste các cấu hình của tôi:

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

Xin lỗi tôi không biết nhiều về LDAP, tôi chỉ cần cài đặt nó sáng nay vì vậy câu hỏi của tôi nghe có vẻ ngây thơ. Tôi chỉ cần một cơ sở người dùng tập trung mà tôi sẽ có thể cập nhật và chia sẻ giữa một số máy chủ.

Cảm ơn rất nhiều sự giúp đỡ của bạn.

Trả lời

7

1) cấu hình của bạn có hai backends xác thực được cài đặt:

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

Django sẽ cố gắng để xác thực đối với mỗi một lần lượt cho đến khi nó tìm thấy một trong những thành công (hoặc cho đến khi nó chạy ra ngoài). Vì thư mục LDAP của bạn trống, nó có lẽ sẽ luôn thất bại, vì vậy ModelBackend sẽ luôn có được một bức ảnh. Nếu bạn không muốn xác thực người dùng dựa vào cơ sở dữ liệu người dùng Django, bạn phải loại bỏ ModelBackend khỏi danh sách.

2) django-auth-ldap không truyền bá người dùng Django đến LDAP, chỉ theo cách khác. Nó được thiết kế để cho phép triển khai Django để xác thực đối với các dịch vụ LDAP hiện có được quản lý riêng. Để thao tác nội dung của thư mục LDAP từ ứng dụng Django, bạn có thể muốn xem django-ldapdb.