2013-11-27 6 views
5

से समूह प्राप्त करना LDAP-सर्वर (ActiveDirectory) के विरुद्ध उपयोगकर्ताओं को प्रमाणीकृत करने के लिए मैं django-ldap-auth का उपयोग कर रहा हूं। उपयोगकर्ता लॉगिन करने में सक्षम हैं और प्रति उपयोगकर्ता झंडे (उदा। Is_staff) सही ढंग से सेट हैं।एलडीएपी से django

मैं ldap-users समूह के आधार पर अपने django-users में django-groups जोड़ना चाहता हूं। मेरी सेटिंग Here're:

import ldap 
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, ActiveDirectoryGroupType 

AUTH_LDAP_SERVER_URI = "ldap://XXX" 

AUTH_LDAP_BIND_AS_AUTHENTICATING_USER = True 
AUTH_LDAP_BIND_DN = "" 
AUTH_LDAP_BIND_PASSWORD = "" 

# I somewhere read that this should help, but it didn't: 
#AUTH_LDAP_GLOBAL_OPTIONS = { 
# ldap.OPT_REFERRALS: 0 
#} 

AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Benutzer,ou=Konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX", 
ldap.SCOPE_SUBTREE, "(cn=%(user)s)") 
AUTH_LDAP_USER_DN_TEMPLATE = "CN=%(user)s,OU=Benutzer,OU=Konten,OU=XXX,OU=XXX,DC=XXX,DC=XXX,DC=XXX" 

# Set up the basic group parameters. 
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("OU=AnwenderRollen,OU=Gruppen,OU=XXX,OU=XXX,DC=XXX,DC=XXX,DC=XXX", 
    ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)" 
) 
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="CN") 
# also tried various possibilities for objectClass and AUTH_LDAP_GROUP_TYPE 
#AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") 
#AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType(name_attr="cn") 


# 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=example,dc=com", 
    "is_staff": "CN=GROUPNAME,OU=AnwenderRollen,OU=Gruppen,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX", 
    "is_superuser": "CN=GROUPNAME,OU=AnwenderRollen,OU=Gruppen,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX" 
} 

AUTH_LDAP_PROFILE_FLAGS_BY_GROUP = { 
    #"is_awesome": "cn=awesome,ou=django,ou=groups,dc=example,dc=com", 
} 

# This is the default, but I like to be explicit. 
AUTH_LDAP_ALWAYS_UPDATE_USER = True 

# Use LDAP group membership to calculate group permissions. 
AUTH_LDAP_FIND_GROUP_PERMS = True 

# Cache group memberships for an hour to minimize LDAP traffic 
AUTH_LDAP_CACHE_GROUPS = True 
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 1 #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', 
) 

केवल इस सेटिंग के कुछ हिस्सों काम करते हैं: लॉग इन, काम करता है एक Django-उपयोगकर्ता बनाया जाता है, गुण LDAP (AUTH_LDAP_USER_ATTR_MAP) से लिया जाता है और झंडे सेट कर रहे हैं (AUTH_LDAP_USER_FLAGS_BY_GROUP) एक ही साथ AUTH_LDAP_GROUP_SEARCH में समूह-पथ। लेकिन इस समूह खोज इस त्रुटि के कारण नहीं काम करता है:

DEBUG Populating Django user USERNAME 
DEBUG search_s('CN=USERNAME,OU=Benutzer,OU=Konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX', 0, '(objectClass=*)') returned 1 objects: cn=USERNAME,ou=benutzer,ou=konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX 
DEBUG CN=USERNAME,OU=Benutzer,OU=Konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX is a member of cn=GROUPNAME,ou=anwenderrollen,ou=gruppen,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX 
DEBUG CN=USERNAME,OU=Benutzer,OU=Konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX is a member of cn=GROUPNAME,ou=anwenderrollen,ou=gruppen,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX 
DEBUG Django user USERNAMEdoes not have a profile to populate 
ERROR search_s('OU=AnwenderRollen,OU=Gruppen,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX', 2, '(&(objectClass=groupOfNames)(member=CN=USERNAME,OU=Benutzer,OU=Konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX))') raised OPERATIONS_ERROR({'info': '00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece', 'desc': 'Operations error'},) 
DEBUG search_s('OU=AnwenderRollen,OU=Gruppen,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX', 2, '(&(objectClass=groupOfNames)(member=CN=USERNAME,OU=Benutzer,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX))') returned 0 objects: 

के बाद से समूह-पथ झंडे के लिए और समूह खोज रहा संभालने था कि यह काम करना चाहिए के लिए ही हैं। क्या प्रमाणीकरण करने वाले उपयोगकर्ता के रूप में बाध्यकारी होने पर समूहों की खोज करना एक समस्या है?

मुझे क्या याद आ रही है?

उत्तर

2

यहाँ मैं यह काम करने के लिए किया था है:

AUTH_LDAP_BIND_AS_AUTHENTICATING_USER = True 
AUTH_LDAP_BIND_DN = "existing_user" 
AUTH_LDAP_BIND_PASSWORD = "existing_password" 

और मैं (objectClass=top)

ऐसा लगता है कि django_auth_ldap झंडे के लिए जाँच करने के लिए बाध्य उपयोगकर्ता का उपयोग करता है करने के लिए (objectClass=groupOfNames) बदल (is_staff, ...) लेकिन समूहों की जांच नहीं है। इसलिए मैंने इन चरों को प्रमाण-पत्र जोड़ा जो अब समूहों की खोज के लिए उपयोग किए जाते हैं।

हालांकि, यह काम करता है!

संबंधित मुद्दे