0

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

这是我的代码:

设置.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'); 

我在哪里做错了?

4

1 回答 1

0

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

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

或者,使用 LDAP 浏览器(ldap 客户端实用程序可能安装在服务器上,提供 ldapsearch)查看组对象以确定对象上存在哪些对象类。您应该会看到类似 groupOfUniqueNames、posixGroup 或 group 的内容。使用组对象类名称代替 posixAccount。

于 2018-11-16T17:33:04.970 回答