Django LDAP组搜索问题

时间:2018-11-15 15:32:03

标签: django authentication ldap ldapauth

我正在尝试在Django中实现LDAP。 我可以在Django中使用LDAP登录。但是,当我尝试限制某些特定组的访问权限时,我将无法登录。

这是我的代码:

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 :(得分:0)

在您的AUTH_LDAP_GROUP_SEARCH中,您的组不太可能将posixAccount作为对象类-在这种情况下,您的组搜索找不到匹配的对象。

由于您要提供完全限定的DN作为搜索基础(“ cn-my_group_name ...,dc = de”),因此可以使用匹配任何条件的过滤器“(&(objectClass = *))”对象类。

或者,使用LDAP浏览器(可以在ldapsearch上将ldap客户端utils安装在服务器上)来查看组对象,以确定该对象上存在哪些对象类。您应该看到诸如groupOfUniqueNames,posixGroup或group之类的内容。使用组对象类名称代替posixAccount。