Автологин

Общие сведения

Механизм автологина используется для возможности создания внешними системами учетных записей пользователей, автоматическому логину пользователей в 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]

Здесь использованы следующие параметры:

  1. email (обязательный) - действующий e-mail адрес пользователя. Если под таким e-mail пользователь уже зарегистрирован и этот пользователь проассоциирован с организацией, создание нового пользователя не произойдет, а будет произведен вход под уже существующим аккантом.
  2. orgid (обязательный) - идентификатор организации, сообщается владельцем ELiS и является числом.
  3. time (обязательный) - текущее время в unixtime в секундах с 1 января 1970 года. В течении 24 часов после этого времени ссылка автологина устареет. Разрешается установить часовой пояс в часовой пояс библиотеки, однако если часовой пояс не проставлять, на работоспособность ссылки это может повлиять только уменьшением срока жизни ссылки.
  4. sign (обязательный) - подпись организации всей ссылки. См. ниже способ ее формирования.
  5. username (опционально) - логин (или имя пользователя), под которым будет произведена регистрация пользователя или его логин. Если не указано, логин на стороне ELiS будет сформирован автоматически. Внимание: если пользователь с таким логином уже существует и он проассоциирован с организацией, создание пользлователя не произойдет, а будет произведен вход под существующим аккаунтом.
  6. 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 пользлователь сможет “восстановить пароль”.

Вложенные организации

Организации могут быть вложены друг в друга (иерархия). Секретный ключ не наследуется. В случае если вы создаете в рамках одной организации несколько подорганизаций (групп), на каждую подорганизацию следует также проставить секретный ключ.

Не запрещается устанавливать один и тот же секретный ключ всем подорганизациям в случае если они контролируются одним администратором или юридическим лицом.