Это мой первый проект Django, так что терпите меня. Я создаю чистый проект DRF.
Мое требование состоит в том, что пользователь будет вызывать REST API при отправке пользовательских кредитов в базовом формате аутентификации, который мне нужно проверить на сервере LDAP.
Кроме того, каждый API с отправленными учетными данными, поэтому мне не нужно хранить учетные данные на моем конце (в модели ПОЛЬЗОВАТЕЛЯ по умолчанию)
Я хотел использовать:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
)
} and
INSTALLED_APPS = [
'django.contrib.auth',
}
чтобы иметь возможность читать основные авторизации, а затем надеяться подключиться:
AUTHENTICATION_BACKENDS = [
'django_auth_ldap.backend.LDAPBackend',
]
для аутентификации пользователя на сервере LDAP.
вопросов:
- есть ли лучший подход?
- поскольку я передаю учетные данные только серверу LDAP, чтобы узнать, действительны ли кредиты, мне не нужна таблица USER в базе данных. Мне он нужен только для объектного моделирования. Как я могу этого добиться? поможет ли модель Прокси? Можем ли мы иметь абстрактную модель как AUTH_USER_MODEL? или использование бэкенда удаленной аутентификации пользователя - лучший вариант?
@AhmedHosny: это: github.com/django-auth-ldap/django-auth-ldap
Итак, вы имеете в виду привязку пользователя, использовать этот параметр AUTH_LDAP_BIND_AS_AUTHENTICATING_USER
, упомянутый здесь django-auth-ldap.readthedocs.io/en/latest/…?
Нет, я имею в виду, что всякий раз, когда мы используем contrib.auth, с ним связана пользовательская модель. Эта модель отображается в таблице базы данных. Мне не нужна эта таблица базы данных. Я хочу получить ту базовую информацию об авторизации, которую я получаю в DRF, я могу передать ее в библиотеку LDAP.
Коротко отвечу: да, вы можете создать класс, заменяющий модель User, например:
class User(object):
def __init__(self, authenticated=False, email=None):
self.is_authenticated = authenticated
self.email = email
Настоящий вопрос заключается в том, как позволить вашему промежуточному программному обеспечению аутентификации возвращать это в ваш request.user
. Есть несколько способов (я никогда не использовал django-auth-ldap
, поэтому, возможно, я не пишу для этого лучшие практики):
Одно из возможных решений:
унаследовать от этого класса django_auth_ldap.backend.LDAPBackend
https://django-auth-ldap.readthedocs.io/en/latest/reference.html#django_auth_ldap.backend.LDAPBackend
from django_auth_ldap.backend import LDAPBackend
class CustomLDAP(LDAPBackend)
def get_user_model(self):
# return your custom user
а затем вам нужно AUTHENTICATION_BACKENDS
на
AUTHENTICATION_BACKENDS = [
'path.to.CustomLDAP',
]
Не уверен, нужен ли вам этот DEFAULT_AUTHENTICATION_CLASSES
если вы работаете с django-auth-ldap
. Может это Аутентификация LDAP с помощью django REST
также помочь
ПРОЧИТАЙТЕ ЭТО ПЕРВЫЙ
Я думаю также здесь https://django-auth-ldap.readthedocs.io/en/latest/users.html они это хорошо объясняют. Так что, возможно, решение кроется в самом пакете
django_auth_ldap.backend.LDAPBackend
поступает из определенного пакета или это ваш собственный бэкэнд?