Совместное использование аутентифицированных пользователей между Django и django-rest-framework в одном проекте - PullRequest
0 голосов
/ 04 марта 2019

У меня есть проект Django, который в конечном итоге будет состоять из трех приложений.Два из них будут «обычными» приложениями Django, третье - приложение djangorestframework.Я также планирую создать настольный клиент для проекта в какой-то момент.
Я хочу, чтобы остальное приложение было единственным объектом, взаимодействующим с базой данных.Поэтому я использую requests для связи с остальными конечными точками из представлений «обычных» приложений Django, и я сделаю то же самое для настольного клиента.
Я хочу, чтобы все приложения были доступны только для аутентифицированных пользователей, поэтому яЯ использую сервер аутентификации Django.

Мой вопрос заключается в том, как передать аутентифицированного пользователя / сеанс из чистых приложений Django остальным конечным точкам при использовании requests в представлениях.

Iудалось аутентифицироваться на остальном API с помощью request HTTPBasicAuth, но для этого необходимо, чтобы у меня был пароль пользователя в виде простого текста.Конечно, я мог бы создать технического пользователя для выполнения этих запросов.Но это также означало бы, что каждый запрос сначала должен пройти проверку подлинности, и это не самый лучший подход.

Я попытался извлечь cookie сеанса из объекта request, который являетсяпредоставил представлениям и передал его через requests.get, но не сумел правильно ввести его в вызов requests.get.

На данный момент использование запросов и установленных сеансов выглядит как мое лучшеепоспорим, тем более что настольный клиент тоже будет так делать.Поэтому в настоящее время я ищу правильный способ предоставления requests.get cookie-файла сеанса, но я, безусловно, открыт для лучших решений.

1 Ответ

0 голосов
/ 04 марта 2019

Вы должны использовать токены.

Обычно любой вид аутентификации в вашем проекте django должен управляться с помощью безопасных токенов.

И да, проверка аутентификации должна выполняться каждый раз, когда вы отправляете запрос.Чтобы сделать это быстрее, вы можете хранить токены в памяти.(Вы можете использовать Redis или даже загрузить свою базу данных в память или ...), но это правильный и распространенный способ.Даже django делает эту проверку каждый раз, используя свои встроенные функции.

Документация DRF рекомендовала несколько пакетов для управления этими токенами:

DRF: сторонние пакеты

Я использовал knox для многих проектов, и это довольно хорошо.

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

Большинство приложений используют токен в заголовках, которые вы можете просто добавить ко всем своим requests вызовам:

Запросы документов: пользовательские заголовки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...