Я думаю, что многие знают что такое KeyCloak, а если нет то в двух словах это сервер авторизации, поддерживающий OpenID, SAML, OAuth2.0, подключение хранилищ пользователей через LDAP и т.п., а также использование сторонних Identity Provider (например, вход через соцсети типа Google, Github, Microsoft и т.п.) По умолчанию если скачать KeyCloak, то он будет использовать БД H2, которая подходит для тестирования приложений, но не подходит для production-использования и тем более не подходит для использования в сервере авторизации. Поэтому в этой статье мы покажем как с 0 подключить и использовать MySql (любая другая СУБД будет цепляться аналогичным образом, поэтому разница будет минимальной).
Готовим систему
Я использую чистую Ubuntu, поэтому все, что нужно будем ставить через менеджер пакетов apt:
1. Mysql Server:
sudo apt-get install mysql-server
Далее необходимо запустить конфигурирование mysql запустив mysql_secure_installation:
- пароль root
- анонимный доступ
- и наличие тестовой БД
В целом все вышеупомянутое легко настраивается через печать на клавиатуре значений y/n.
Теперь добавим нового mysql-пользователя, назовем его keycloak:
CREATE USER 'keycloak'@'localhost' IDENTIFIED BY 'keyC10@K';
Теперь создаем БД для самого keycloak: CREATE DATABASE keycloak и выдаем привилегии на эту БД для нашего пользователя
GRANT ALL PRIVILEGES ON keycloak.* TO 'keycloak'@'localhost'.
2. Java
Установим JDK 8: sudo apt-get install openjdk-8-jre
3. Keycloak
Забираем Keycloak c github: wget https://github.com/keycloak/keycloak/releases/download/15.0.2/keycloak-15.0.2.tar.gz
Копируем куда нужно с помощью cp и распаковываем tar -xf keycloak-15.0.2.tar.gz
Теперь начинается самое интересное:
- Необходимо скачать Mysql JDBC-драйвер (.jar-файл) и разместить по пути modules\system\layers\keycloak\com\mysql\main (необходимо создать все отсутствующие директории)
- В этой же директории создадим файл module.xml со следующим содержимым:
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-8.0.20.jar" />
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
3. Используем утилиту jboss-cli.sh из bin загрузим модуль в контейнер
сервлетов с помощью команды:
module add --name=com.mysql
--resources=../modules/system/layers/keycloak/com/mysql/main/mysql-
connector-java-8.0.20.jar --dependencies=javax.api,javax.transaction.api
4. Осталось отредактировать файлы настроек keycloak и можно запускать
keycloak на mysql. Для этого откроем файл standalone.xml в
standalone/configuration Сначала добавим описание нового driver в
секции <drivers> в <datasources>:
<driver name="mysql" module="com.mysql">
<driver-class>com.mysql.jdbc.Driver</driver-class>
</driver>
Далее используем вышесозданный драйвер в секции <datasource> где pool-name="KeycloakDS", для mysql она должна выглядеть так:
Для удобства скопирую сюда текст:
<datasource jndi-name="java:/jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true">
<connection-url>jdbc:mysql://localhost:3306/keycloak?useSSL=false&characterEncoding=UTF-8</connection-url>
<driver>mysql</driver>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>15</max-pool-size>
</pool>
<security>
<user-name>keycloak</user-name>
<password>keyC10@K</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
<validate-on-match>true</validate-on-match>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
</validation>
В завершении нужно не забыть настроить IP-адреса для доступа к самому Keycloak (можно использовать широковещательный адрес 0.0.0.0) и к консоли управления (в ранее упомянутом файле standalone.xml):
После этого мы можем запустить KeyCloak, если все ок, то мы увидим стартовую страничку KeyCloak:
Однако, для настройки админского пароля нужно либо:
- Зайти локально (через localhost)
- Воспользоваться утилитами KeyCloak
В моем случае 1 вариант для меня не подходит, поэтому посмотрим как использовать вариант 2.
для этого используем в bin утилиту .\add-user-keycloak.sh -r master -u admin -p 123, при входе не забываем сменить пароль. Вот и все, настройка Keycloak выполнена.