django-auth-ldap AUTH_LDAP_FIND_GROUPS_PERMS 不工作

django-auth-ldap AUTH_LDAP_FIND_GROUPS_PERMS not working

我 运行 Django 1.8.18 和 django-auth-ldap 1.2.11 针对 Active Directory 进行身份验证。

我当前的配置针对 AD 进行了正确的身份验证,但是,当我启用 AUTH_LDAP_FIND_GROUPS_PERMS 时,它似乎没有做任何事情。我之前尝试过 AUTH_LDAP_MIRROR_GROUPS(没有任何问题),发现所有用户组都已创建。唯一的小问题是它还会删除用户拥有的所有本地组成员资格。

无论如何,在 AUTH_LDAP_MIRROR_GROUPS 自动创建群组后,我希望 AUTH_LDAP_FIND_GROUPS_PERMS 会在下次登录时自动将用户添加到同一群组。然而,这并没有发生。配置的唯一变化是这两行。 AUTH_LDAP_GROUP_TYPE 设置为 NestedActiveDirectoryGroupType()

知道为什么用户没有被添加到具有匹配名称的组中吗?

我怀疑您使用的是 AUTH_LDAP_GROUP_TYPE。我也在使用这个库,并让它同步 groups/memberships。这是我对库的设置的完整转储:

AUTH_LDAP_START_TLS = True
AUTH_LDAP_SERVER_URI = 'xxxx'
AUTH_LDAP_GLOBAL_OPTIONS = {
    ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_NEVER
}
AUTH_LDAP_BIND_DN = 'yyyy'
AUTH_LDAP_BIND_PASSWORD = 'zzzz'
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
    LDAPSearch(
        'OU=OurCorp,DC=foo,DC=bar,DC=com',
        ldap.SCOPE_SUBTREE,
        filterstr='(uid=%(user)s)'
    ),
)

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

AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    'OU=Security Groups,OU=Users and Groups,OU=OurCorp,DC=foo,DC=bar,DC=com',
    ldap.SCOPE_SUBTREE,
    '(objectClass=group)'
)
AUTH_LDAP_MIRROR_GROUPS = True

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    'is_staff': [  # Allow login to the Django admin site
        'CN=Our-Staff-Group,OU=Security Groups,OU=Users and Groups,OU=OurCorp,DC=foo,DC=bar,DC=com',
    ],
    'is_superuser': [  # Implicitly grant ALL permissions to members of these groups
        'CN=Our-Superuser-Group,OU=Security Groups,OU=Users and Groups,OU=OurCorp,DC=foo,DC=bar,DC=com'
    ],
}

正如我提到的,我认为 AUTH_LDAP_GROUP_TYPE 可能是您的问题,但这可能取决于您自己的 AD 设置。

事实证明 AUTH_LDAP_FIND_GROUPS_PERMS 实际上并没有将用户添加到组中,而是虚拟地将他们添加到组中以确保他们的权限响应就像他们在与名称匹配的组中一样。