Аутентификация 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)