Автологин¶
Общие сведения¶
Механизм автологина используется для возможности создания внешними системами учетных записей пользователей, автоматическому логину пользователей в ELiS и перенаправлению на определенный документ (URL) после успешного входа.
Для возможности использования данного механизма внешняя система должна обладать секретным ключем.
Когда использовать¶
Автологин полезен для интеграции издательской ЭБС на базе ELiS с электронной информационной образовательной средой (ЭИОС) вузов-клиентов и собственного вуза.
Включение¶
Включите модули ELiS user и ELiS Organization.
В таксономии создайте экземпляры организаций в словаре ‘organization’ (https://example.com/admin/structure/taxonomy/organization).
Перейдите к редактированию организации и в поле ‘secret’ (‘field_secret’) добавьте случайную текстовую строку, которая будет играть роль пароля (секретного ключа) на возможность организации создавать пользователей.
Секретный ключ может содержать латинские буквы и цифры (a-z,0-9). Пример: nivy4378q14djkhgfu7t10hvnz89dfao7.
Передайте организации секретный ключ, но не публикуйте его в открытом доступе. Любой кто знает секретный ключ сможет создавать от имени организации пользователей.
Передайте организации инструкцию по интеграции.
Инструкция для организации¶
Организация может создавать аккаунты пользователей, ассоциировать эти аккаунты с самой организацией и автоматически аутентифицировать пользователей в библиотеке ELiS путем формирования специального URL.
Для создания аккаунта необходимо знать только e-mail пользователя, на который будет выслан пароль для последующих входов. Пароль пользователя и его имя не нужны.
Для сервера https://elis.example.com формирование ссылки автологина осуществляется путем формирования ссылки:
https://elis.example.com/autologin?email=EMAIL&orgid=ORGID&time=TIME&sign=SIGN[&username=USERNAME][&redirect=REDIRECT]
Здесь использованы следующие параметры:
- email (обязательный) - действующий e-mail адрес пользователя. Если под таким e-mail пользователь уже зарегистрирован и этот пользователь проассоциирован с организацией, создание нового пользователя не произойдет, а будет произведен вход под уже существующим аккантом.
- orgid (обязательный) - идентификатор организации, сообщается владельцем ELiS и является числом.
- time (обязательный) - текущее время в unixtime в секундах с 1 января 1970 года. В течении 24 часов после этого времени ссылка автологина устареет. Разрешается установить часовой пояс в часовой пояс библиотеки, однако если часовой пояс не проставлять, на работоспособность ссылки это может повлиять только уменьшением срока жизни ссылки.
- sign (обязательный) - подпись организации всей ссылки. См. ниже способ ее формирования.
- username (опционально) - логин (или имя пользователя), под которым будет произведена регистрация пользователя или его логин. Если не указано, логин на стороне ELiS будет сформирован автоматически. Внимание: если пользователь с таким логином уже существует и он проассоциирован с организацией, создание пользлователя не произойдет, а будет произведен вход под существующим аккаунтом.
- redirect (опционально) - абсолютный URL или относительный (от адреса сайта) URL на который следует перенаправить пользователя после успешной аутентификации. Приведем примеры. Для редиректа на главную старницу сайта (“/”) следует указать параметр как “&redirect=%2F”. Для редиректа в личный кабинет пользователя (“/user”) укажите “&redirect=%2Fuser”.
Для формирования подписи ссылки необходимо иметь секретный ключ. Ключ получается у владельца библиотеки ELiS. Подпись (параметр sign) формируется путем расчета SHA-1 хеша от конкатинации параметров в следующем порядке:
sign = SHA1(email + orgid + time + username + redirect + secret)
При этом если параметры username и redirect не заданы, вместо них подставляется пустая строка (“”).
Пример формирования подписи на PHP:
$str = $email . $orgid . $time . $username . $redirect . $secret;
$sign = hash("sha1", $str);
Полный пример кода формирования ссылки на PHP:
$url = 'https://elis.example.com';
$username = '';
$redirect = 'node/7823'; // Перенаправить на страницу https://elis.example.com/node/7823
$email = 'user@example.org';
$orgid = '133'; // Идентификатор организации выдается владельцем библиотеки ELiS
$time = time();
$secret = 'nivy4378q14djkhgfu7t10hvnz89dfao7'; // Секретный ключ выдается владельцем организации
$str = $email . $orgid . $time . $username . $redirect . $secret;
$sign = hash("sha1", $str); // подпись сформирована
// Создаем URL из обязательных параметров
$autologin_url = $url . "/autologin?email=" . urlencode($email) . "&orgid=$orgid&time=$time&sign=" . urlencode($sign);
// Добавляем опциональные параметры, если заданы
if ($redirect && strlen($redirect)) $autologin_url .= "&redirect=" . urlencode($redirect);
if ($username && strlen($username)) $autologin_url .= "&username=" . urlencode($username);
// В $autologin_url находится ссылка для входа.
print "<a href='$autologin_url'>Войти</a>";
Пример полученной ссылки при time=1527017103:
https://elis.example.com/autologin?email=user%40example.org&orgid=133&time=1527017103&sign=08bb19bca83b3fecf9c59cddf543f5fbf81be5f0&redirect=node%2F7823
Если пользовател существует с указанным e-mail или username, но он ранее не был ассоциирован с организацией с идентификатором orgid, вход в существующий аккаунт произведен не будет. Вместо этого будет предпринята попытка создания нового пользователя.
Подтверждение аккаунта по e-mail не требуется, но на почтовый ящик будет отправлена ссылка на сброс пароля и на этот e-mail пользлователь сможет “восстановить пароль”.
Вложенные организации¶
Организации могут быть вложены друг в друга (иерархия). Секретный ключ не наследуется. В случае если вы создаете в рамках одной организации несколько подорганизаций (групп), на каждую подорганизацию следует также проставить секретный ключ.
Не запрещается устанавливать один и тот же секретный ключ всем подорганизациям в случае если они контролируются одним администратором или юридическим лицом.