Иногда возникает необходимость организовать Single Sign-On на уже существующей базе LDAP.
Т.к. ELiS работает на Drupal, в целом вопрос ставится про создание SSO в организации и подключение Drupal7 к этому SSO.
Содержание
Установка Keycloak[править]
Установка Keycloak описана на официальном сайте и сводится к скачиванию и распаковке ZIP-архива, установки Java 11+ и запуску сервера Keycloak на localhost.
Если на сервере не установлен GUI, то чтобы подключиться можно использовать проброс портов SSH.
Создание Realm[править]
Дальше необходимо подключиться к серверу, создать новый realm (вместо master). Редактировать Realm можно в левом меню в Realm Settings.
Добавление LDAP и импорт пользователей[править]
В Realm надо настроить импорт пользователей.
В правом меню выберите User Federation и добавьте провайдер LDAP.
Вам потребуется настроить импорт, и для Keycloak 10.0.2 были неожиданные моменты, на которые надо обратить внимание:
В Users DN оказалось, что надо писать без OU=users, т.е. ограничиться только доменом dc=example,dc=com.
В User Object Classes можно через запятую приводить несколько классов, я решил ограничиться user.
Для Active Directory указание Bind DN является обязательным, но указать надо не полный путь (cn=proxy,ou=users,dc=example,dc=com), а в формате user@examle.com, в данном случае proxy@example.com.
При корректных параметрах импорт пользователей произойдет успешно. При ошибках смотрите логи на сервере (обратитесь к документации, если возникают проблемы).
Создание клиента для авторизации с сайтов[править]
Чтобы сайты могли по OpenID Connect подключаться к Keycloak, надо на самом Keycloak создать клиента(ов). Информация по клиенту потом будет вписываться в подключаемые по SSO сайты.
В правом меню Keycloak выберите Clients и нажмите кнопку создать (create). Присвойте любой Client ID и выберите протокол openid-connect.
Выберите Access Type "confidential", а в Valid Redirect URIs впишите с использованием подстановки * сайты, с которых будет разрешена авторизация пользователей, т.е. сайт с ELiS и если необходимо, другие сайты (пример: https://elis.example.com/*).
При редактировании клиента обратите внимание на вкладку Credentials, там будет секретное слово (Secret), которое вам понадобится при настройке OAuth2 на подключаемых сайтов.
Настройка работы по HTTPS[править]
Чтобы переход на страницу авторизации был зашифрован, вам следует настроить использование Keycloak через HTTPS. Способы для этого могут быть разные, например поставить на сервер с Keycloak NGINX, получить для него сертификат через Let's Encrypt и настроить перенаправление трафика на localhost и порт 8080, на котором по умолчанию запускается Keycloak:
location /auth/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
Также вам надо задать полный URL, на котором у вас будет виден Keycloak в интернете (например https://sso.example.com/auth если сервер Keycloak будет размещен на сервере sso.example.com). Для этого в директории Keycloak найдите standalone/configuration/standalone.xml строчку с frontendUrl и впишите Base URL на котором будет виден Keycloak.
<property name="frontendUrl" value="https://sso.example.com/auth"/>
Перезапустите сервер Keycloak.
Вам надо будет создать скрипт запуска Keycloak. На CentOS поможет нечто такое, где надо подставить своего пользователя, а архив keycloak распакован в /opt:
daemonize -u USERNAME -c /opt/keycloak -p /var/run/keycloak/keycloak.pid -l /var/lock/subsys/keycloak -a -e /var/log/keycloak/console.log -o /var/log/keycloak/console.log /opt/keycloak/bin/standalone.sh
Настройка ELiS на использование SSO[править]
Keycloak может после настройки использоваться как с OpenID Connect, так и с SAML2. Работа проверена с OpenID Connect.
Установка модуля openid_connect в Drupal[править]
Установите модуль openid_connect, включите его и перейдите к настройке.
Вам потребуется указать в качестве идентификатора клиента тот, который вы создали в Keycloak и секретное слово из Keycloak->Clients->YOUCLIENT->Credentials.
Также вам потребуется заполнить URL конечных точек (endpoint), чтобы найти их перейдите в Keycloak к настройке Realms и кликните по OpenID Endpoint Configuration, в открывшемся файле вы увидите все необходимые URL для вашего Realm.
После настройки модуля вам надо добавить использование входа в один клик путем добавления соответствующего блока на сайт Drupal по admin/structure/block.