Python django auth ldap auth\u ldap\u FIND\u GROUP\u PERMS不工作 问题

Python django auth ldap auth\u ldap\u FIND\u GROUP\u PERMS不工作 问题,python,django,django-auth-ldap,Python,Django,Django Auth Ldap,据我所知,django auth ldap正在根据我的配置做我需要的一切。除了无法建立从ldap组到django组的映射之外 我在ldap中有一个名为dev的组,即cn=dev。我在django还有一个名为dev的小组。当我在Django(uid=fkilibarda)中使用我的用户登录时,Django auth ldap能够获取我的名字、姓氏和电子邮件,但它无法将我添加到dev组 调试 django\u auth\u ldap.backendline:203 def get_group_per

据我所知,
django auth ldap
正在根据我的配置做我需要的一切。除了无法建立从ldap组到django组的映射之外

我在ldap中有一个名为
dev
的组,即
cn=dev
。我在django还有一个名为
dev
的小组。当我在Django(
uid=fkilibarda
)中使用我的用户登录时,
Django auth ldap
能够获取我的名字、姓氏和电子邮件,但它无法将我添加到
dev

调试
django\u auth\u ldap.backend
line:203

def get_group_permissions(self, user, obj=None):                            
   if not hasattr(user, 'ldap_user') and self.settings.AUTHORIZE_ALL_USERS:
       _LDAPUser(self, user=user)  # This sets user.ldap_user              

   if hasattr(user, 'ldap_user') and (user.ldap_user.dn is not None):      
       return user.ldap_user.get_group_permissions()                       
   else:                                                                   
       return set()
我发现
hasattr(用户,'ldap\u user')
总是错误的。因此,
user.ldap\u user.get\u group\u permissions()
从不运行,这就是从未建立组映射的原因

我只是不明白上面的意义。为什么
user
没有
ldap\u user
属性

配置 版本
django auth ldap==1.2.14

python3

结果是我无法理解django\u auth\u ldap是如何工作的。我预计,当
AUTH\u LDAP\u FIND\u GROUP\u PERMS=True
时,我的用户将根据我在LDAP中的组成员身份添加到Django中的相应组中

因此,如果用户
fkilibarda
是LDAP中
dev
组的成员,那么我认为用户
fkilibarda
将自动添加到Django中的
dev

相反,对于用户在Django中发出的每个请求,
Django_auth_ldap
将向ldap发送一个请求,以确定用户应该获得哪些组/权限。这显然是更好的方法

因此,如果您正在测试:

  • 不要期望将用户添加到Django中的组中
  • 测试时不要使用超级用户,因为超级用户可以访问所有内容

  • 实际上,
    django\u auth\u ldap
    非常清楚地描述了这一点

    事实证明我不理解
    django\u auth\u ldap
    是如何工作的。我预计,当
    AUTH\u LDAP\u FIND\u GROUP\u PERMS=True
    时,我的用户将根据我在LDAP中的组成员身份添加到Django中的相应组中

    因此,如果用户
    fkilibarda
    是LDAP中
    dev
    组的成员,那么我认为用户
    fkilibarda
    将自动添加到Django中的
    dev

    相反,对于用户在Django中发出的每个请求,
    Django_auth_ldap
    将向ldap发送一个请求,以确定用户应该获得哪些组/权限。这显然是更好的方法

    因此,如果您正在测试:

  • 不要期望将用户添加到Django中的组中
  • 测试时不要使用超级用户,因为超级用户可以访问所有内容

  • django\u auth\u ldap
    实际上非常清楚地描述了这一点

    如果hasattr(用户,'ldap\u user')为False,那么听起来这个特定用户没有通过LDAPBackend的身份验证。您是否配置了多个身份验证\u后端?您好,谢谢查看。我在上面显示身份验证后端的配置部分添加了其他信息。@psagers^^^^^^^检查user.backend()以查看哪个后端最终对用户进行了身份验证。听起来好像LDAPBackend正在失败,它正在退回到ModelBackend。也可以尝试禁用ModelBackend或设置AUTH\u LDAP\u AUTHORIZE\u ALL\u用户进行三角剖分。日志()通常也很有用。@psagers我花了一些时间阅读了sessions/users/authentication的内容,希望能更好地理解这一点。我还添加了一个
    hasattr(用户,'backend')
    django\u auth\u ldap.backend::LDAPBackend::get\u group\u permissions
    ,当我通过django管理界面登录时,它总是返回
    False
    。因此,我不确定如何查看我的用户使用的是哪个后端进行身份验证。如果hasattr(用户,'ldap_user')为False,则听起来这个特定用户没有通过LDAPBackend的身份验证。您是否配置了多个身份验证\u后端?您好,谢谢查看。我在上面显示身份验证后端的配置部分添加了其他信息。@psagers^^^^^^^检查user.backend()以查看哪个后端最终对用户进行了身份验证。听起来好像LDAPBackend正在失败,它正在退回到ModelBackend。也可以尝试禁用ModelBackend或设置AUTH\u LDAP\u AUTHORIZE\u ALL\u用户进行三角剖分。日志()通常也很有用。@psagers我花了一些时间阅读了sessions/users/authentication的内容,希望能更好地理解这一点。我还添加了一个
    hasattr(用户,'backend')
    django\u auth\u ldap.backend::LDAPBackend::get\u group\u permissions
    ,当我通过django管理界面登录时,它总是返回
    False
    。因此,我不确定如何查看我的用户使用哪个后端进行身份验证。
    MIDDLEWARE = [
        'debug_toolbar.middleware.DebugToolbarMiddleware',
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    AUTHENTICATION_BACKENDS = {
        'django_auth_ldap.backend.LDAPBackend',
        'django.contrib.auth.backends.ModelBackend',
    }
    
    # ===================
    # LDAP configurations
    # ===================
    
    AUTH_LDAP_SERVER_URI = "example_server"
    
    AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
        'ou=group,dc=example,dc=example,dc=com',
        ldap.SCOPE_SUBTREE,
        '(objectClass=posixGroup)',
    ) 
    AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
    
    AUTH_LDAP_USER_FLAGS_BY_GROUP = {
        'is_active': 'cn=dev,ou=group,dc=example,dc=example,dc=com',
        'is_staff': 'cn=dev,ou=group,dc=example,dc=example,dc=com',
        'is_superuser': 'cn=dev,ou=group,dc=example,dc=example,dc=com',
    }
    
    AUTH_LDAP_USER_SEARCH = LDAPSearch(
        'ou=people,dc=example,dc=example,dc=com',
        ldap.SCOPE_SUBTREE,
        '(uid=%(user)s)'
    )
    
    AUTH_LDAP_USER_ATTR_MAP = {
        "first_name": "givenName", 
        "last_name": "sn", 
        "email": "mail"
    }
    
    AUTH_LDAP_FIND_GROUP_PERMS = True
    AUTH_LDAP_ALWAYS_UPDATE_USER = True