Использование:
- Джанго 1,11
- Python 3,6
- DRF с JWT в FE
Я понимаю, что администратор Django использует сеанс и базовую аутентификацию.
То, что я сделал до сих пор: Заменил страницу входа аутентификации Django Admin на AWS-Cognito:
- Пользователь переходит к
domain/admin/*
, перенаправлен на вход в AWS
- При успешном входе пользователь перенаправляется на
redirect_uri
, приводит к Django View
- Впредставление, которое я заменяю
code
токенами
- Я не могу перейти ни на одну страницу администратора - я пытаюсь перенаправить, но это не работает, так как я не
login()
Пользователь - Застрял - я хотел бы связать пользователя с извлеченными токенами и проходить проверку подлинности при каждом запросе страницы администратора, а когда пользователь выходит из системы, удалите токены
Чтоделать дальше?
- Когда я использую JWT с приложением Front End, каждый
request.META
имеет HTTP_AUTHORIZATION
, и используюПодходящий бэкэнд.
- Я знаю, как добавить бэкенды и потенциально использовать user.backend (я также использую Cognito-JWT для других частей FE, поэтому уже написал BE для этого)
- Мне нужно найти способ заменить аутентификацию сеансов администратора Django на извлеченный токен
Спасибо!
РЕДАКТИРОВАТЬ:
Если я login()
пользователь и настрою его на бэкэнд модели, который у меня уже есть, я могу перейти на любую страницу администратора - но используя сеанс, который я создал, когда я вошел в систему.
Я быхотел бы, чтобы пользователь был настроен на новую модель бэкэнда с аутентификацией, использующей токен (из Django backend docs ):
class MyBackend:
def authenticate(self, request, token=None):
# Check the token and return a user.
...
- Как сделать разныеЗапросы администратора страниц передают токен аутентификации?
- Где я могу хранить токен?(Я мог бы сделать
NewUserModel
, то есть 1-1 с моделью пользователя Django, и поместить туда поле токена) - Я думаю о написании промежуточного программного обеспечения для захвата всех запросов и поиске целевого URL- если URL администратора, добавьте токен в
HTTP_AUTHORIZATION
, как только я получу пользователя, указанного в # 2 (пользователь в каждом запросе из-за DRF)
РЕДАКТИРОВАТЬ 2
Мое решение все больше и больше напоминает это стековое решение , я бы хотел знать, есть ли другие варианты, но вот что я сделал до сих пор:
- Я создал модель, которая имеет поле пользователя 1-1 и поле токенов
- По мере извлечения / создания пользователя я также сохраняю токены на связанных с ним пользователях.модель из # 1 выше
- Я создал промежуточное программное обеспечение, которое захватывает любой запрос в
process_request
, и имеет доступ к пользователю.Я могу видеть токены там, когда я получаю доступ к связанной модели пользователя из # 1 выше.
- Я пытаюсь установить заголовок
HTTP_AUTHORIZATION
в запросе, но пока не могу этого сделать (в настоящее время застрял здесь)
- В моем бэкэнде я смотрю на входящий запрос и пытаюсь получить
HTTP_AUTHORIZATION
- еще нет.
РЕДАКТИРОВАТЬ 3
Я закончил тем, что просто использовал сеанс Django как есть - как только пользователь один раз аутентифицируется с помощью AWS-Cognito, можно с уверенностью предположить, что он является законным пользователем.
Затем я просто выкидываю Cognito-JWT и login()
Пользователь.
Примечание. Я все еще заинтересован в решении, которое исключило бы сессию Django для использования Cognito-JWT, и хотел бы услышать предложения.