Аутентификация LDAP с использованием учетных данных пользователя в django

Сервер LDAP, который мне нужно использовать, не поддерживает анонимную аутентификацию, поэтому мне нужно использовать учетные данные пользователя, но я не хочу указывать имя пользователя и пароль в конфигурации. Это способ аутентификации пользователя по его учетным данным?

Я могу подтвердить подлинность с помощью конфигурации выглядит так:

AUTH_LDAP_SERVER_URI = 'ldap://ldap.host.name'
AUTH_LDAP_BIND_DN = 'username'
AUTH_LDAP_BIND_PASSWORD = 'password'
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
    LDAPSearch('OU=MyOU,DC=MyDC,DC=MySiteName,DC=com',ldap.SCOPE_SUBTREE,'(&(memberOf=CN=MyGroup,OU=MyRole,DC=MyDC,DC=MySiteName,DC=com)(sAMAccountName=%(user)s))'),
    LDAPSearch('OU=MyOtherOU,DC=MyDC,DC=MySiteName,DC=com',ldap.SCOPE_SUBTREE,'(&(memberOf=CN=MyOtherGroup,OU=MyRole,DC=MyDC,DC=MySiteName,DC=com)(sAMAccountName=%(user)s))'),
)

или это (без каких-либо дополнительных данных):

AUTH_LDAP_SERVER_URI = 'ldap://ldap.host.name'
AUTH_LDAP_USER_DN_TEMPLATE = '%(user)s'

Во-вторых, я не могу использовать поиск объединения, поэтому я не могу использовать его, но он может аутентифицироваться без пароля. Я не знаю, как и я не могу найти информацию об этом.

Это способ использовать первый способ и не вводить пароль в конфигурации?

2 ответа

Решение

Можете ли вы войти на сервер LDAP как пользователь, чтобы найти пользователя для входа? Я собираюсь пойти с нет. Если я понимаю вопрос, вы хотите что-то логически невозможное.

Если вы беспокоитесь о проверке учетных данных в системе контроля версий или о чем-то еще, вы должны поместить их в файл на сервере и прочитать их в settings.py во время выполнения.

Если я вас правильно понимаю - вы можете уйти AUTH_LDAP_BIND_PASSWORD как пустое в settings.py, и обновите его по вашему мнению с помощью введенного пользователем пароля в форме перед вызовом метода authenticate(), например:

def auth_and_login(request, onsuccess='/', onfail='/login/'):
    if request.method == 'POST':
        username = request.POST['user']
        password = request.POST['password']

        settings.AUTH_LDAP_BIND_PASSWORD = password
        user = auth.authenticate(username=username, password=password)

        if user is not None and user.is_active:
            auth.login(request, user)
            return redirect(onsuccess)
        else:
            return redirect(onfail)
Другие вопросы по тегам