ФорумПрограммированиеPythonDjango → Remote User Backend

Remote User Backend

  • Dreamer

    Сообщения: 82 Репутация: N Группа: Адекваты

    Spritz 15 февраля 2017 г. 22:35

    Привет пыха!

    В общем вопрос в следующем, мне надо подружить Django с удаленным микросервисом авторизации.

    Схема примерно такая:
    1 кейс - фронтенд авторизуется в сервисе авторизации и в последующем шлет в django запросы с jwt в заголовке запроса - со стороны django требуется расшифровать токен, обратиться к микросервису авторизации (либо к своему кешу), определить тип пользователя и выдать соответствующий контент/права.

    2 кейс - кроме SPA у сайта пока живет версия, которую отдает собственно django через вьюхи. Django тоже должна руководствоваться пользователями с микросервиса (токен полагаю будет храниться в куках).

    С какой стороны подступаться к решению задачи? Как правильно делается?

    На данный момент я написал небольшой класс, который умеет регистрироваться/авторизироваться/получать данные пользователя с микросервиса. Нагуглил что от юзера в БД я могу избавиться с помощью managed=False, а от fk с помощью db_constraint=False. И из шела все работает (по отдельности =) ), но не понятный момент - как правильно переписать middleware (или auth backend, или еще что-то) так, чтобы django понимала, что пользователя надо из токена, используя класс который может общаться с микросервисом авторизации.

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 15 февраля 2017 г. 22:47, спустя 11 минут 10 секунд

    можно взять django-rest-framework или посмотреть как в нём сделано

    он умеет залогинивать одновременно через токен и ставить обычную джанговскую куку, которая работает со стандартным auth backend

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 февраля 2017 г. 22:56, спустя 9 минут 33 секунды

    нихуя не понял зачем в этой связке вообще локальный user пакет. Если они тебе не нужны - пиши свой бекенд автризации и все, буквально в 30 строчек все реализуется на ура.

    Дальше архитектурно я не знаю что за проект и задача, нужно ли обращение к этим юзерам как ForeignKey или нет, если не нужна - то вообще пох на все :)

    Если нужна, то надо свою модель User запилить чтобы она умела адекватно себя вести с is_staff, is_root, etc. Ну и пермишшены поддерживала и тп. При этом имела какой то ID и умела в общем себя адекватно вести в окружении django admin (ведь больше нигде django-auth и не используется по умолчанию)

    Сапожник без сапог
  • Dreamer

    Сообщения: 82 Репутация: N Группа: Адекваты

    Spritz 15 февраля 2017 г. 22:57, спустя 53 секунды

    @Sinkler, может я не правильно понял, но кажись просто джанговская кука не подойдет, т.к. табличка с пользователями будет удалена. django ничего не знает о пользователях.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 февраля 2017 г. 22:59, спустя 2 минуты 1 секунду

    @Sinkler, может я не правильно понял, но кажись просто джанговская кука не подойдет, т.к. табличка с пользователями будет удалена. django ничего не знает о пользователях.

    @Dreamer, ну хранить конечно в куки или в сессии - где удобно. Особенно забавно хранить JWT токен в Signed-Value Session Cookie :D

    Спустя 16 сек.

    забавно в плане "we should go deeper!!" :D

    Сапожник без сапог
  • Dreamer

    Сообщения: 82 Репутация: N Группа: Адекваты

    Spritz 15 февраля 2017 г. 23:03, спустя 4 минуты 21 секунду

    @phpdude, у меня вопрос как раз в том, что именно (auth backend/middleware/etc..) мне надо написать свое, чтобы при наличии токена внутри request появлялся user.

    с кастомизацией модели пользователя вроде как все понятно

  • Dreamer

    Сообщения: 82 Репутация: N Группа: Адекваты

    Spritz 15 февраля 2017 г. 23:16, спустя 12 минут 13 секунд

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

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 февраля 2017 г. 23:18, спустя 2 минуты 21 секунду

    @phpdude, у меня вопрос как раз в том, что именно (auth backend/middleware/etc..) мне надо написать свое, чтобы при наличии токена внутри request появлялся user.

    с кастомизацией модели пользователя вроде как все понятно

    @Dreamer, ну как дети прямо! :)

    наследуемся и пляшем :)

    Middleware | Django documentation | Django [docs.djangoproject.com]

    Спустя 35 сек.

    Authentication using REMOTE_USER | Django documentation | Django [docs.djangoproject.com]

    Сапожник без сапог
  • Dreamer

    Сообщения: 82 Репутация: N Группа: Адекваты

    Spritz 15 февраля 2017 г. 23:47, спустя 28 минут 52 секунды

    @phpdude, всё) допёр) спасибо!

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 16 февраля 2017 г. 0:04, спустя 16 минут 41 секунду

    @phpdude, всё) допёр) спасибо!

    @Dreamer, не за что :)

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!