Джанго Админ использует JWT - PullRequest
0 голосов
/ 10 декабря 2018

Использование:

  • Джанго 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.
        ...
  1. Как сделать разныеЗапросы администратора страниц передают токен аутентификации?
  2. Где я могу хранить токен?(Я мог бы сделать NewUserModel, то есть 1-1 с моделью пользователя Django, и поместить туда поле токена)
  3. Я думаю о написании промежуточного программного обеспечения для захвата всех запросов и поиске целевого URL- если URL администратора, добавьте токен в HTTP_AUTHORIZATION, как только я получу пользователя, указанного в # 2 (пользователь в каждом запросе из-за DRF)

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

Мое решение все больше и больше напоминает это стековое решение , я бы хотел знать, есть ли другие варианты, но вот что я сделал до сих пор:

  1. Я создал модель, которая имеет поле пользователя 1-1 и поле токенов
  2. По мере извлечения / создания пользователя я также сохраняю токены на связанных с ним пользователях.модель из # 1 выше
  3. Я создал промежуточное программное обеспечение, которое захватывает любой запрос в process_request, и имеет доступ к пользователю.Я могу видеть токены там, когда я получаю доступ к связанной модели пользователя из # 1 выше.
  4. Я пытаюсь установить заголовок HTTP_AUTHORIZATION в запросе, но пока не могу этого сделать (в настоящее время застрял здесь)
  5. В моем бэкэнде я смотрю на входящий запрос и пытаюсь получить HTTP_AUTHORIZATION - еще нет.

РЕДАКТИРОВАТЬ 3

Я закончил тем, что просто использовал сеанс Django как есть - как только пользователь один раз аутентифицируется с помощью AWS-Cognito, можно с уверенностью предположить, что он является законным пользователем.
Затем я просто выкидываю Cognito-JWT и login() Пользователь.

Примечание. Я все еще заинтересован в решении, которое исключило бы сессию Django для использования Cognito-JWT, и хотел бы услышать предложения.

...