home

Запуск в организации с Active Directory SSO на базе Keycloak и подключение ELiS к Keycloak по OpenID Connect

keycloak-login-page.png

Иногда возникает необходимость организовать 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.

keycloak-ad.png

При корректных параметрах импорт пользователей произойдет успешно. При ошибках смотрите логи на сервере (обратитесь к документации, если возникают проблемы).

Создание клиента для авторизации с сайтов[править]

Чтобы сайты могли по OpenID Connect подключаться к Keycloak, надо на самом Keycloak создать клиента(ов). Информация по клиенту потом будет вписываться в подключаемые по SSO сайты.

В правом меню Keycloak выберите Clients и нажмите кнопку создать (create). Присвойте любой Client ID и выберите протокол openid-connect.

Выберите Access Type "confidential", а в Valid Redirect URIs впишите с использованием подстановки * сайты, с которых будет разрешена авторизация пользователей, т.е. сайт с ELiS и если необходимо, другие сайты (пример: https://elis.example.com/*).

keycloak-client-openid-connect-settings.png

При редактировании клиента обратите внимание на вкладку 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.

drupal-openid-connect-settings.png

Также вам потребуется заполнить URL конечных точек (endpoint), чтобы найти их перейдите в Keycloak к настройке Realms и кликните по OpenID Endpoint Configuration, в открывшемся файле вы увидите все необходимые URL для вашего Realm.

keycloak-endpoints-urls.png

После настройки модуля вам надо добавить использование входа в один клик путем добавления соответствующего блока на сайт Drupal по admin/structure/block.