Автоматический вход в систему (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))