Django LDAP поиск группы Проблема - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь реализовать LDAP в Django. Я могу войти, используя LDAP в Django. Но когда я пытаюсь ограничить доступ для какой-то определенной группы, я не могу больше войти в систему.

Вот мой код:

Settings.py

  import ldap
  from django_auth_ldap.config import ldapsearch, GroupOfUniqueNamesType, GroupOfNamesType ,LDAPGroupQuery, PosixGroupType 
#(I imported many, as I was trying differently)


AUTH_LDAP_SERVER_URI = 'ldap://ldap.mydomain.de'    
AUTH_LDAP_USER_DN_TEMPLATE = 'uid=%(user)s,ou=user,dc=mydomain,dc=de'

#AUTH_LDAP_START_TLS = True

AUTH_LDAP_BIND_AS_AUTHENTICATING_USER = True
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_BIND_DN = "" 
AUTH_LDAP_BIND_PASSWORD = "" 
#AUTH_LDAP_FIND_GROUP_PERMS = True #added for group

AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

#ldap
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("cn=My_group_Name, dc=mydomain,dc=de",
                                    ldap.SCOPE_SUBTREE, "(objectClass=posixAccount)"
                                    )
#AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
AUTH_LDAP_GROUP_TYPE = PosixGroupType (name_attr="cn")

AUTH_LDAP_REQUIRE_GROUP = "cn=My_group_Name, dc=mydomain,dc=de"

AUTHENTICATION_BACKENDS = [
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
]

Если я отключу Require_Group, я могу успешно войти в систему. но если я включаю, возникает ошибка. (Я в группе) Журнал как

search_s('uid=shaondebnath,ou=user,dc=mydomain,dc=de', 0, '(objectClass=*)') returned 1 objects: uid=shaondebnath,ou=user,dc=mydomain,dc=de
Caught LDAPError while authenticating shaondebnath: NO_SUCH_OBJECT({'matched': u'dc=mydomain,dc=de', 'desc': u'No such object'},)

Информация, которую я получаю от моей организации:

$ conf ['authtype'] = 'authldap'; 
$ conf ['plugin'] ['authldap'] ['server'] = 'ldap.mydomain.de'; 
$ conf ['plugin'] ['authldap'] ['usertree'] = 'ou = user, dc = mydomain, dc = de'; 
$ conf ['plugin'] ['authldap'] ['userfilter'] = '(& (objectClass = posixAccount) (uid =% {user}))'; 
$ conf ['plugin'] ['authldap'] ['version'] = 3; 
$ conf ['plugin'] ['authldap'] ['mapping'] ['grps'] = array ('memberof' => '/CN=(.+?),/i'); 

Где я делаю не так?

1 Ответ

0 голосов
/ 16 ноября 2018

В вашем AUTH_LDAP_GROUP_SEARCH маловероятно, что ваша группа использует posixAccount в качестве объектного класса - в этом случае поиск вашей группы не находит подходящего объекта.

Поскольку вы предоставляете полностью определенное DN в качестве базы поиска ("cn-my_group_name ..., dc = de"), вы можете использовать фильтр "(& (objectClass = *))", который будет соответствовать любому класс объекта.

В качестве альтернативы используйте обозреватель LDAP (утилиты клиента ldap могут быть установлены на сервере, предоставляющем ldapsearch), чтобы просмотреть объект группы и определить, какие классы объектов присутствуют на объекте. Вы должны увидеть что-то вроде groupOfUniqueNames, posixGroup или group. Используйте имя класса объекта группы вместо posixAccount.

...