django-python3-ldap搜索属于Active Directory中特定组的用户

时间:2018-01-31 18:55:35

标签: python django active-directory ldap

我的Django项目中包含django-python3-ldap,我指的是Active Directory服务器。它连接到AD服务器并将用户名,名字和散列密码返回到auth_user表。如何将搜索限制为仅限特定AD组中的用户?

以下是相关设置:

LDAP_AUTH_SEARCH_BASE = "OU=******,DC=ad,DC=******,DC=org"
LDAP_AUTH_USER_FIELDS = {
     "username": "samaccountname",
     "first_name": "givenname",
     "last_name": "surname",
     "email": "EmailAddress",
}
LDAP_AUTH_OBJECT_CLASS = "User"
LDAP_AUTH_USER_LOOKUP_FIELDS = ("username",)
LDAP_AUTH_FORMAT_USERNAME = "django_python3_ldap.utils.format_username_active_directory"
LDAP_AUTH_ACTIVE_DIRECTORY_DOMAIN = "AD"
LDAP_AUTH_FORMAT_SEARCH_FILTERS = "django_python3_ldap.utils.format_search_filters"

我相信我需要LDAP_AUTH_FORMAT_SEARCH_FILTERS使用"和"原始搜索库的条件,但我不确定如何这样做。我假设我需要编写自定义format_search_filter,但我不能直观地了解它如何与AD群组进行交叉核对。

1 个答案:

答案 0 :(得分:1)

如何对此特定包进行过滤,请记录here。在示例中,它显示了如何使用组成员身份进行过滤。以下将限制搜索到AD组“foo”

# settings.py
LDAP_AUTH_FORMAT_SEARCH_FILTERS = "path.to.your.custom_format_search_filters"

# path/to/your/module.py
from django_python3_ldap.utils import format_search_filters

def custom_format_search_filters(ldap_fields):
    # Add in simple filters.
    ldap_fields["memberOf"] = "foo"
    # Call the base format callable.
    search_filters = format_search_filters(ldap_fields)
    return search_filters

您可以使用通常的LDAP过滤语法来替代(或另外)应用规则...

search_filters.append("(|(memberOf=groupA)(memberOf=GroupB))")

您可以阅读有关过滤语法here和许多其他地方的更多信息。