Принято соглашение о том что запросы между клиентом и сервером во всех приложениях должны быть авторизованы с помощью токенов. Для этого пользователь в клиентском приложении использует пару логин-пароль и дальше клинтское приложение уже получает токен у сервера в автоматическом режиме.
Сервер приложения получив от клиента логин и пароль формирует запрос на отдельный сервис который занят проверкой и генерацией токенов. И далее уже на основе ответа сервиса авторизации либо работает с пользователем либо нет.
Источником данных о пользователях и их активности (включен/выключен, истек аккаунт и пр.) является LDAP/AD
.
В качестве интерфейса для всех серверов инфраструктуры используется сервер Keycloak
.
На текущий момент (12 ноября 2018) сервер запущен на
devel
.
Для установки необходимо скачать актуальный дистрибутив с сайта https://www.keycloak.org.
В распакованном архиве в директории bin
можно сразу запустить файл ./stabdalone.sh
и в консоле видеть процес запуска
сервера.
Сервер может быть запущен в 3 разных режимах и конфигурация для этих режимов лежт соответственно в 3 разных файлах.
Описание режимов запуска сервера
./standalone.sh
- автономный режим./standalone.sh --server-config=standalone-ha.xml
- режим автономной кластеризации./domain.sh
- режим кластеризации доменаПо умолчанию сервер стартует на 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>