Django-python3-ldap Аутентификация только определенных групп

Надеюсь, кто-нибудь поможет мне отладить проблему, возникшую при использовании django-python3-ldap.

Я смог заставить аутентификацию работать, но мне нужно иметь возможность аутентифицировать только пользователей, которые находятся в определенной группе AD ("BI - Admin" в MSBI),

Вот мой код, который работает (для аутентификации всех пользователей)

Settings.py:

AUTHENTICATION_BACKENDS = ["django_python3_ldap.auth.LDAPBackend"]
#AUTH_LDAP_SERVER_URI = "LDAP://SERVERNAME"
LDAP_AUTH_URL = ["LDAP://SERVERNAME:389"]
LDAP_AUTH_USE_TLS = False
import ssl
LDAP_AUTH_TLS_VERSION = ssl.PROTOCOL_TLSv1_2
LDAP_AUTH_SEARCH_BASE = "cn=users,dc=DOMAIN,dc=org"
LDAP_AUTH_OBJECT_CLASS = "user"
LDAP_AUTH_USER_FIELDS = {
"username": "sAMAccountName",
"first_name": "givenName",
"last_name": "sn",
"email": "mail",
}
LDAP_AUTH_USER_LOOKUP_FIELDS = ("username",)

LDAP_AUTH_CLEAN_USER_DATA = "django_python3_ldap.utils.clean_user_data"

LDAP_AUTH_SYNC_USER_RELATIONS = "django_python3_ldap.utils.sync_user_relations"

from apprum.ldap_filters import custom_format_search_filters

LDAP_AUTH_FORMAT_SEARCH_FILTERS = "apprum.ldap_filters.custom_format_search_filters"

LDAP_AUTH_FORMAT_USERNAME = "django_python3_ldap.utils.format_username_active_directory_principal"

LDAP_AUTH_ACTIVE_DIRECTORY_DOMAIN = "domain.org"`

ldap_filters.py :

from django_python3_ldap.utils import format_search_filters

def custom_format_search_filters(ldap_fields):
    #ldap_fields["memberOf"] = "BI - Admin"
    search_filters = format_search_filters(ldap_fields)
    # Advanced: apply custom LDAP filter logic.
    #search_filters.append("(|(memberOf=BI - Team))")
    #search_filters.append("(&(memberOf=cn=BI - Admin,OU=MSBI,DC=domain,dc=org))")
    # All done!
    print(search_filters)
    return search_filters

Структура Active Directory:

Domain.org --> Groups -> MSBI -> BI - Admin
Domain.org --> Users -> Adam.Wally

"Adam.Wally" - это пользователь в моей тестовой AD и член BI - Admin. Поэтому теоретически эта учетная запись должна быть аутентифицирована. Ну, это то, к чему я стремлюсь,

Если я отменю ldap_fields["memberOf"] = "BI - Admin", то в терминале я получу следующее

LDAP connect succeeded
['(sAMAccountName=adam.wally)', '(objectClass=user)', '(memberOf=BI - Admin)']
LDAP user lookup failed

Может быть, я упустил что-то очевидное? Заранее спасибо!

Как выглядит запись в AD? В нашем AD это будет (с вашими примерными данными):

memberOf=cn=BI - Admin,OU=MSBI,DC=domain,dc=org

Итак, в вашем коде для ldap_filters.py:

from django_python3_ldap.utils import format_search_filters

def custom_format_search_filters(ldap_fields):
    ldap_fields["memberOf"] = "cn=BI - Admin,OU=MSBI,DC=domain,dc=org"
    search_filters = format_search_filters(ldap_fields)
    print(search_filters)
    return search_filters
Вернуться на верх