Изменить шифрование пароля LDAP с помощью django-python3-ldap - PullRequest
0 голосов
/ 04 ноября 2019

РЕДАКТИРОВАТЬ 2:

Кажется, что команда migrate импортирует данные, НО пароль установлен на «непригодный», так как он вызывает этот метод вбиблиотека:

# If the user was created, set them an unusable password.
if created:
   user.set_unusable_password() # Will call: self.password = make_password(None)
   user.save()

Если у кого есть решение? Удалось ли вам использовать django-python3-ldap с другой версией?


EDIT1:

Кому-то удается использовать django-python3-ldap успешно и может показать мне его настройки. Возможно, я забыл конфигурацию в своих настройках ...

Спасибо!


Я использую django-python3-ldap v0.11.2 для аутентификации LDAP в Django.

Мне удалось подключиться к моему тестовому серверу ldap, который я создал с некоторыми фиктивными пользователями. Миграция с помощью этой команды: python manage.py ldap_sync_users работает нормально и обновляет мою базу данных.

Однако, когда я пытаюсь соединиться с одним из пользователей, я получаю это сообщение об ошибке: LDAP connect failed: LDAPInvalidCredentialsResult - 49 - invalidCredentials - None - INVALID_CREDENTIALS: Bind failed: Invalid authentication - bindResponse - None.

Я подозреваю, что это связано с тем, что сохраненный пароль неправильно зашифрован ... Это потому, что следующий тест работает нормально:

  • Подключение к существующей учетной записи администратора
  • Изменениепароль для вновь импортированного пользователя jdoe до abc
  • Выйти
  • Соединение с использованием пользователя: jdoe и пароль abc теперь отлично работает!

Кто-нибудь сталкивался с такой проблемой раньше? Или знает, как изменить шифрование пароля, используемое командой migrate? Или, может быть, я пропустил важную конфигурацию LDAP ...

Настройки Python LDAP:

# LDAP Connection Settings
LDAP_AUTH_URL = "ldap://localhost:10389"
LDAP_AUTH_USE_TLS = None
LDAP_AUTH_SEARCH_BASE = "DC=example,DC=com"

LDAP_AUTH_USER_FIELDS = {
    "username": "uid",
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail",
    "password": "userPassword"
}

LDAP_AUTH_OBJECT_CLASS = "organizationalPerson"

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"

LDAP_AUTH_FORMAT_SEARCH_FILTERS = "django_python3_ldap.utils.format_search_filters"

LDAP_AUTH_FORMAT_USERNAME = "django_python3_ldap.utils.format_username_active_directory"
LDAP_AUTH_CONNECTION_USERNAME = 'uid=admin,ou=system'
LDAP_AUTH_CONNECTION_PASSWORD = 'secret'

Конфигурация тестового пользователя LDAP:

dn: cn=Jane Doe,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Jane Doe
sn: Doe
ou: site_admin
description: 19650324000000Z
employeeNumber: 12
givenName: Jane
mail: jane@example.com
telephoneNumber: 169-637-3314
telephoneNumber: 907-547-9114
uid: jdoe
userPassword:: abc

Выдержка из моего теста db:

Имя пользователя |Пароль

jdoe ........... |! ipxhdylGKTwILF ...

OkUser ...... | pbkdf2_sha256 $ 150000 $ PHBKev ...

Спасибо за помощь

1 Ответ

0 голосов
/ 06 ноября 2019

Я наконец решил реализовать свой собственный метод аутентификации и получения пользователя, который:

  • Проверка, существует ли пользователь уже (базовая аутентификация django)
  • Если нет, проверьте, еслипользователь с указанным именем является частью определенной группы объявлений. Если он является его частью, создайте пользователя, используя базовый django:
User.objects.create_superuser(username=username,
                              email=mail,
                              password='mypassword',
                              first_name=first_name,
                              last_name=last_name)
...