我的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群组进行交叉核对。
答案 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和许多其他地方的更多信息。