Django

2011-06-19 12 views
9

का उपयोग कर एलडीएपी में उपयोगकर्ताओं को बनाएँ मुझे एलडीएपी प्रमाणीकरण मॉड्यूल django-auth-ldap के साथ परेशानी हो रही है। मैं इस साइट से उदाहरण के विन्यास का उपयोग कर रहा: http://packages.python.org/django-auth-ldap/Django

मैं दो काम करने करना चाहते हैं:

1) LDAP के खिलाफ Authentificate: पल के लिए, मेरे LDAP डेटाबेस खाली है, मैं नहीं जोड़ा था, इसके लिए कुछ भी, वास्तव में मुझे नहीं पता कि कैसे करें। हालांकि, मैं अभी भी अपने django-आधारित साइट में लॉग इन करने में सक्षम हूं, मेरे django डेटाबेस में संग्रहीत मेरे पुराने लॉगिन/पासवर्ड के साथ। ऐसा क्यों है? इसे अनदेखा नहीं किया जाना चाहिए, क्या लॉग इन प्रक्रिया एलडीएपी उपयोगकर्ता/पासवर्ड के साथ नहीं होनी चाहिए? दूसरे शब्दों में, यदि मेरा एलडीएपी डेटाबेस खाली है, तो मेरे प्रत्येक लॉगिन में विफल नहीं होना चाहिए? हालांकि, ऐसा नहीं है, मुझे लगता है कि django पूरी तरह से django-auth-ldap मॉड्यूल को अनदेखा करता है।

2) डीजेंगो (और दूसरी तरफ नहीं) के साथ एलडीएपी सिंक्रनाइज़ करें मैं प्रमाणित करने के लिए मौजूदा उपयोगकर्ता डेटाबेस का उपयोग नहीं करना चाहता हूं। मैं Django में नए उपयोगकर्ताओं को बनाने में सक्षम होना चाहता हूं और इन उपयोगकर्ताओं को एलडीएपी में प्रचारित करना चाहता हूं ताकि उन्हें अन्य सेवाओं द्वारा साझा किया जा सके, मेरे मामले में, एक ओपनफायर सर्वर। आप django-auth-ldap के साथ ऐसा कैसे करते हैं?

यहाँ मेरी विन्यास की कॉपी/पेस्ट है:

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

माफ करना, मैं LDAP के बारे में ज्यादा पता नहीं है, मैं सिर्फ यह आज सुबह स्थापित तो मेरे सवाल का अनुभवहीन लग सकता है। मुझे बस एक केंद्रीकृत उपयोगकर्ता आधार की आवश्यकता है कि मैं कई सर्वरों के बीच अद्यतन और साझा करने में सक्षम हो जाऊंगा।

आपकी मदद के लिए बहुत बहुत धन्यवाद।

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

Django जब तक यह एक है कि सफल होता है पाता है (या इसे बाहर चलाता है जब तक) बारी में से हर एक के खिलाफ प्रमाणित करने का प्रयास करेंगे:

उत्तर

7

1) आपका विन्यास दो प्रमाणीकरण बैकेंड स्थापित है। चूंकि आपकी एलडीएपी निर्देशिका खाली है, इसलिए यह संभवतः हमेशा विफल हो जाएगी, इसलिए मॉडलबैकेंड हमेशा एक शॉट प्राप्त करेगा। यदि आप Django उपयोगकर्ता डेटाबेस के खिलाफ उपयोगकर्ताओं को प्रमाणीकृत नहीं करना चाहते हैं, तो आपको सूची से ModelBackend को हटाना होगा।

2) django-auth-ldap Django उपयोगकर्ताओं को एलडीएपी तक प्रचारित नहीं करता है, केवल दूसरी तरफ। यह डीजेगो तैनाती को मौजूदा एलडीएपी सेवाओं के खिलाफ प्रमाणीकृत करने की अनुमति देने के लिए डिज़ाइन किया गया है जो अलग से प्रबंधित किए जाते हैं। Django ऐप से एलडीएपी निर्देशिका की सामग्री में हेरफेर करने के लिए आप django-ldapdb देख सकते हैं।