Аутентификация Django с базовой аутентификацией с поддержкой LDAP и без модели пользователя

Это мой первый проект 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? или использование бэкенда удаленной аутентификации пользователя - лучший вариант?

django_auth_ldap.backend.LDAPBackend поступает из определенного пакета или это ваш собственный бэкэнд?

Ahmed Hosny 08.08.2018 14:46

@AhmedHosny: это: github.com/django-auth-ldap/django-auth-ldap

Bhumi Singhal 08.08.2018 14:48

Итак, вы имеете в виду привязку пользователя, использовать этот параметр AUTH_LDAP_BIND_AS_AUTHENTICATING_USER , упомянутый здесь django-auth-ldap.readthedocs.io/en/latest/…?

Ahmed Hosny 08.08.2018 14:58

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

Bhumi Singhal 08.08.2018 15:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
806
1

Ответы 1

Коротко отвечу: да, вы можете создать класс, заменяющий модель 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.LDAPBackendhttps://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 они это хорошо объясняют. Так что, возможно, решение кроется в самом пакете

Другие вопросы по теме