Я пытаюсь реализовать единый вход с использованием только аутентификации django.
Предположим, что два проекта django находятся на разных поддоменах: site.com (auth) и app1.site.com (app1).) Таблица авторизации на site.com является главной.site.com обрабатывает: вход в систему, выход из системы, регистрацию учетной записи и т. д.
site.com устанавливает для SESSION_COOKIE_DOMAIN значение .site.com, чтобы разрешить его чтение поддоменами
app1 будет иметь логин_урл, установленный напредставление в проекте app1, которое выполняет следующее:
- извлекает значение session_id для сайта.com (из файла cookie)
- проверяет идентификатор сеанса, отправляя запрос на: site.com/validate/ [session_id] /
- Если False, перенаправляет на site.com/login?next=[...]
- Если True, запросить данные пользователя по адресу: site.com/attributes/ [session_id] /
- site.com / attribute / предоставляет словарь со всеми значениями пользователя, зашифрованные с использованием общего SSO_KEY (шифрование выполняется так же, как django кодирует и декодирует session_id)
Теперь app1 имеет модель SSO_User, которая имеет два поля: внешний ключ для пользовательской модели и целочисленное поле.Модели SSO_User связывают локального пользователя Auth с идентификатором главной таблицы auth.
Используя идентификатор, полученный с site.com, мы проверяем SSO_User для существующего локального пользователя, если true, мы просто обновляем значения и входим в систему;если он не существует, мы создаем пользователя и SSO_User и выполняем вход.
app1 (или любой другой поддомен) может сохранять информацию своего профиля, не мешая никому.
Кажется, что простореализовать и безопасно, но перед внедрением я хотел бы получить некоторые мнения.Что ты думаешь?