Автоматический вход в систему (m3_autologin)

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

Прямой вход без указания пароля

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

Для организации автоматического входа в прикладное приложение необходимо:

  • Указать настройки автовхода в conf-файле приложения;
  • Вставить в settings.py вызов функции регистрации настроек автовхода.

Настройки автовхода указываются в секции [auto-login] conf-файла приложения:

[auto-login]
admin-user = admin, /
demo-user = demo, /

Именем параметра из секции [auto-login] является наименование варианта автовхода в систему, а значением разделенное символом запятая (”,”) пара <логин пользователя>, <url для редиректа после входа>.

Основные шаги при работе механизма автовхода следующие:

  • в систему поступает запрос по URL http://<domain>/auto-login/admin-user;
  • если в конфигурации автовхода существует вариант входа с именем admin-user, то система автоматически авторизует соответствующего пользователя и выполняет редирект на соответствующий URL.

В settings.py прикладного приложения необходимо добавить строки:

from m3.contrib.m3_autologin import read_autologin_config

# ...

#===============================================================================
# Чтение конфигурации автовхода в систему
#===============================================================================
M3_AUTOLOGIN_CONF = read_autologin_config(conf)

# ...

Автовход с аутентификацией на удалённом сервере

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

Для этого в settings.py прикладного приложения необходимо добавить строки:

from m3.contrib.m3_autologin import read_autologin_config

# ...

#===============================================================================
# Чтение конфигурации автовхода в систему
#===============================================================================
# ...
M3_AUTOLOGIN_ALLOW_REMOTE_AUTH = True

# ...

Общая схема удалённой аутентификации следующая:

  • удалённый сервер сервер посылает первый запрос (POST или GET) в систему по URL /remote-login/get-ticket, в параметре username которого указано имя пользователя, которого мы будем аутентифицировать. В ответ на запрос приходит либо статус код 403 (удалённая аутентификация запрещена), либо 404 (пользователь не найден), либо 200 с телом вида alg$salt$ticket_key;
  • удаленный сервер должен выполнить двойную операцию хеширования: сначала хешируем указанный пользователем пароль с использованием алгоритма alg и salt. Затем полученный хеш необходимо перехешировать тем же алгоритмом, с использованием ticket_key в качестве salt;
  • страница, на которой выполняется ввод пароля и пользователя, отправляет GET запрос на адрес /remote-login c параметрами key и hash. В параметре key указывается ticket_key, а в hash - полученное значение хеша.

Пример кода для django, который выполняет двойное хеширование:

from django.contrib.auth.models import get_hexdigest
get_hexdigest(alg, ticket_key, get_hexdigest(alg, salt, user_password))