Проверка подлинности Django LDAP через Active Directory 2008 - PullRequest
5 голосов
/ 01 июня 2011

Я пытаюсь аутентифицировать своего пользователя через корпоративный сервер Active Directory. Я не могу настроить его должным образом, я знаю, что LDAP работает, у меня есть MediaWiki, который настроен и работает для аутентифицироваться на сервере Active Directory.

Система:

    Active Directory 2008
    Django (1, 3, 0, 'final', 0)
    django-auth-ldap 1.0.9

Вот моя конфигурация в settings.py

    from django_auth_ldap.config import LDAPSearch
    import logging

    # makes sure this works in Active Directory
    ldap.set_option(ldap.OPT_REFERRALS, 0)

    LDAP_SERVER_URI = 'ldap://ad.exemple.com'
    AUTH_LDAP_BIND_DN = 'my_user'
    AUTH_LDAP_BIND_PASSWORD = 'my_pass'
    AUTH_LDAP_USER_SEARCH = LDAPSearch('dc=exemple,dc=com', ldap.SCOPE_SUBTREE, '(SAMAccountName=%(user)s)')

    # Populate the Django user from the LDAP directory.
    AUTH_LDAP_USER_ATTR_MAP = {
            "first_name": "givenName",
            "last_name": "sn",
            "email": "mail"
    }

    # This is the default, but I like to be explicit.
    AUTH_LDAP_ALWAYS_UPDATE_USER = True

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

Я также попробовал ssl, добавив новый URI

    LDAP_SERVER_URI = 'ldaps://ad.exemple.com:636'

Я использовал основную группу User для поиска. Мне не нужна какая-то конкретная группа, которую я хочу аутентифицировать.

Сообщение об ошибке возвращает ошибку:

    WARNING 2011-05-31 16:50:19,429 backend 3968 140632428340992 Caught LDAPError while authenticating my_user: INVALID_CREDENTIALS({'info': '80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 525, v1772', 'desc': 'Invalid credentials'},)
    [31/May/2011 16:50:19] "POST /admin/ HTTP/1.1" 200 9648

Увидев эту ошибку и обнаружив ошибку LDAP DSID-0C0903AA, я обнаружил, что должен попытаться установить имя пользователя следующим образом

my_user@exemple.com

Не сработало, выдает ошибку:

    ERROR 2011-05-31 16:55:38,947 config 6505 139868662060800 search_s('dc=ubilium,dc=loc', 2, '(SAMAccountName=my_user)') raised OPERATIONS_ERROR({'info': '000004DC: LdapErr: DSID-0C0906DD, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1772', 'desc': 'Operations error'},)
    DEBUG 2011-05-31 16:55:38,947 backend 6505 139868662060800 Authentication failed for my_user

Кто-нибудь знает, как подключить его?

1 Ответ

1 голос
/ 02 июня 2011

Первая ошибка, которую вы получаете, это LDAP 49 с субкодом 525, что означает, что пользователь не найден. То есть Ваш DN привязки неверен.

Ваша вторая попытка с использованием форматирования userPrincipalName не удастся, так как ваша конфигурация говорит: AUTH_LDAP_USER_SEARCH = LDAPSearch('dc=exemple,dc=com', ldap.SCOPE_SUBTREE, '(SAMAccountName=%(user)s)')

Таким образом, вы пытаетесь использовать переданное имя пользователя в фильтре: (SAMAccountName=%(user)s)

Интересно, это дополнительный s на каждом конце? То есть (SAMAccountName=%(user)) будет правильнее?

То, что он делает, говорит, что для переменной $ (user) найдите меня в AD, чей атрибут sAMAccountName соответствует этому значению, а затем используйте это DN, возвращаемое в качестве DN привязки. Но вы не получаете правильный DN и, следовательно, ошибку LDAP 49 - 525.

...