Django ldap身份验证,多值DN组问题

时间:2019-03-05 18:13:32

标签: django authentication ldap

我正在疯狂地进行Django LDAP身份验证。 我能够连接到LDAP服务器(MS Active Directory),搜索用户但无法针对组进行验证(使用配置参数AUTH_LDAP_REQUIRE_GROUP)。

询问有关AD结构的更多详细信息后,我发现该组使用多值DN来存储名为member的用户

研究文档时,我发现许多AUTH_LDAP_GROUP_TYPE都可以管理该属性,例如:

  • MemberDNGroupType
  • NestedMemberDNGroupType 及其子类,但没有一个可以找到两组用户之一

member属性的屏幕截图: member list

这是与LDAP相关的Django配置

AUTH_LDAP_CONNECTION_OPTIONS ={
    ldap.OPT_PROTOCOL_VERSION:ldap.VERSION3,
    ldap.OPT_REFERRALS:0
}
AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType()

# Baseline configuration.
AUTH_LDAP_SERVER_URI = 'ldap://ldap.xxxx.com'

AUTH_LDAP_BIND_DN = 'auth_user@xxxx.com'
AUTH_LDAP_BIND_PASSWORD = 'qwerty'

AUTH_LDAP_REQUIRE_GROUP = (
        LDAPGroupQuery('cn=group_1,ou=group_container,dc=xxxx,dc=com') |
        LDAPGroupQuery('cn=group_2,ou=group_container,dc=xxxx,dc=com'))

AUTH_LDAP_USER_SEARCH = LDAPSearch(
    'ou=user_container,dc=xxxx,dc=com',
    ldap.SCOPE_SUBTREE,
    '(UserPrincipalName=%(user)s)',
 )

AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    'ou=group_container,dc=xxxx,dc=com',
    ldap.SCOPE_SUBTREE,
    '(objectClass=nestedActiveDirectoryGroup)',
 )

AUTH_LDAP_ALWAYS_UPDATE_USER = True

AUTH_LDAP_CACHE_TIMEOUT = 3600

AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

DN,OU,DC对于用户和组都是正确的。

可能是与member属性类型有关的问题吗?

有任何解决方法的想法吗?

1 个答案:

答案 0 :(得分:0)

我发现了错误。 一切都是由AUTH_LDAP_REQUIRE_GROUP中的属性OU的错字引起的。 解决此问题,并将AUTH_LDAP_GROUP_TYPE更改为ActiveDirectoryGroupType,一切开始正常工作。