Найти в Дзене
Wissance

Подключаем Mysql в Keycloak

Я думаю, что многие знают что такое 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: В целом все вышеупомянутое легко настраивается через печ
Оглавление

Я думаю, что многие знают что такое KeyCloak, а если нет то в двух словах это сервер авторизации, поддерживающий OpenID, SAML, OAuth2.0, подключение хранилищ пользователей через LDAP и т.п., а также использование сторонних Identity Provider (например, вход через соцсети типа Google, Github, Microsoft и т.п.) По умолчанию если скачать KeyCloak, то он будет использовать БД H2, которая подходит для тестирования приложений, но не подходит для production-использования и тем более не подходит для использования в сервере авторизации. Поэтому в этой статье мы покажем как с 0 подключить и использовать MySql (любая другая СУБД будет цепляться аналогичным образом, поэтому разница будет минимальной).

Туториал Wissance о том как использовать сервер авторизации Keycloak c Mysql в качестве хранилища.
Туториал Wissance о том как использовать сервер авторизации Keycloak c 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

Теперь начинается самое интересное:

  1. Необходимо скачать Mysql JDBC-драйвер (.jar-файл) и разместить по пути modules\system\layers\keycloak\com\mysql\main (необходимо создать все отсутствующие директории)
  2. В этой же директории создадим файл 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 она должна выглядеть так:

Настройка подключения к mysql
Настройка подключения к mysql

Для удобства скопирую сюда текст:

<datasource jndi-name="java:/jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true">
<connection-url>jdbc:mysql://localhost:3306/keycloak?useSSL=false&amp;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):

Файл standalone.xml (главный конфиг Keycloak)
Файл standalone.xml (главный конфиг Keycloak)

После этого мы можем запустить KeyCloak, если все ок, то мы увидим стартовую страничку KeyCloak:

стартовая страница Keycloak говорит нам о том, что нужно войти локально, чтобы создать админа
стартовая страница Keycloak говорит нам о том, что нужно войти локально, чтобы создать админа

Однако, для настройки админского пароля нужно либо:

  1. Зайти локально (через localhost)
  2. Воспользоваться утилитами KeyCloak

В моем случае 1 вариант для меня не подходит, поэтому посмотрим как использовать вариант 2.

для этого используем в bin утилиту .\add-user-keycloak.sh -r master -u admin -p 123, при входе не забываем сменить пароль. Вот и все, настройка Keycloak выполнена.