Keycloak

Сервис для авторизации приложений.

Процесс авторизации в инфраструктуре.

Принято соглашение о том что запросы между клиентом и сервером во всех приложениях должны быть авторизованы с помощью токенов. Для этого пользователь в клиентском приложении использует пару логин-пароль и дальше клинтское приложение уже получает токен у сервера в автоматическом режиме.

Сервер приложения получив от клиента логин и пароль формирует запрос на отдельный сервис который занят проверкой и генерацией токенов. И далее уже на основе ответа сервиса авторизации либо работает с пользователем либо нет.

Сервис авторизации.

Источником данных о пользователях и их активности (включен/выключен, истек аккаунт и пр.) является LDAP/AD. В качестве интерфейса для всех серверов инфраструктуры используется сервер Keycloak.

Базовые настройки Keycloak

На текущий момент (12 ноября 2018) сервер запущен на devel.

Для установки необходимо скачать актуальный дистрибутив с сайта https://www.keycloak.org. В распакованном архиве в директории bin можно сразу запустить файл ./stabdalone.sh и в консоле видеть процес запуска сервера.

Сервер может быть запущен в 3 разных режимах и конфигурация для этих режимов лежт соответственно в 3 разных файлах.

Описание режимов запуска сервера

По умолчанию сервер стартует на http://localhost:8080 поэтому если он запускается не на локальной машине а на сервере то необходимо предварительно настроить проксирование запросов. Так же стоит проверить занятость порта 8080.

Настройка портов

Основная документация

Краткие выдержки. Для быстрого тестирования можно указать привязку порта при старте:

standalone.sh -b 192.168.0.5

В этом случе сервер будет слушать запросы к указаннопу в параметре -b IP адресу. Для того чтобы установить IP в качестве постоянной настройки необходимо изменить его в файле конфигурации /standalone/configuration/standalone.xml. Найти секцию interfaces и внести изменения.

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
    </interface>
    <interface name="public">
        <inet-address value="${jboss.bind.address:127.0.0.1}"/>
    </interface>
</interfaces>

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

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
    <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
    <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    <socket-binding name="http" port="${jboss.http.port:8080}"/>
    <socket-binding name="https" port="${jboss.https.port:8443}"/>
    <socket-binding name="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="localhost" port="25"/>
    </outbound-socket-binding>
</socket-binding-group>

Настройка базы данных

Основная документация

Краткие выдержки. Для начала необходимо скачать и положить в структуру сервера Java драйвер для раоты с нужной базой. Важно соблюдать структуру директорий. Дерево директорий

Так же рядом с ним необходимо положить файл module.xml со следующим содержимым.

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">

    <resources>
        <resource-root path="postgresql-9.4.1212.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

Далее в файле конфигурации /standalone/configuration/standalone.xml задаем настройки этого драйвера и dataSource для работы с базой.

DataSource.

<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
    ...
    <spi name="connectionsJpa">
        <provider name="default" enabled="true">
            <properties>
                <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
                <property name="initializeEmpty" value="false"/>
                <property name="migrationStrategy" value="manual"/>
                <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
            </properties>
        </provider>
    </spi>
    ...
</subsystem>

JDBC драйвер.

<subsystem xmlns="urn:jboss:domain:datasources:5.0">
    <datasources>
        ...
        <drivers>
            <driver name="postgresql" module="org.postgresql">
                <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
            </driver>
            <driver name="h2" module="com.h2database.h2">
                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>

Можно видеть что к имеющемуся списку был добавлен драйвер для работы с PostgreSQL.

<driver name="postgresql" module="org.postgresql">
    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>

Далее добавляем dataSource.

<subsystem xmlns="urn:jboss:domain:datasources:5.0">
    <datasources>
        ...
        <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:postgresql://localhost/keycloak</connection-url>
            <driver>postgresql</driver>
            <pool>
                <max-pool-size>20</max-pool-size>
            </pool>
            <security>
                <user-name>William</user-name>
                <password>password</password>
            </security>
        </datasource>
        ...
    </datasources>
</subsystem>

Не забыть указать правильный <connection-url>jdbc:postgresql://localhost/keycloak</connection-url> к созданной заранее базе. А так же правильные доступы.

<security>
    <user-name>William</user-name>
    <password>password</password>
</security>

Создание службы запуска сервера Keycloak для Linux