Оглавление |
---|
Описание
...
width | 40% |
---|
...
Column | |||||||||
---|---|---|---|---|---|---|---|---|---|
Eltex-doors является сервисом аутентификации, который выполняет проверку подлинности пользователя, созданиемсозданием токена и верификацией токена. Eltex-doors формирует токен JWT на основе переданного POST-запроса содержащий логин, пароль, а также метаданные.
Сгенерированные токены хранятся в БД Параметры "срок действия токена{iat}" и "время создания токена{exp}" указаны в payload токена и. Их можно узнать выполнив декодирование токена. С версии 1.15 появилась возможность валидировать токены без дополнительного обращения к doors. При установке или обновлении генерируются открыйоткрытый и закрытый ключ, которые по умолчанию размещаются в каталоге /etc/eltex-doors/keys/. Для того, чтобы к приватному ключу имели доступ только доверенные сервисы, ключам назначаются права 440 и принадлежатпринадлежность группе eltex:
private.pem - ключ необходимый для подписи JWT-токенов. public.pem - ключ необходимый сервисам для валидации JWT-токенов. Если по какой-либо причине необходимо пересоздать ключи, то можно запусить скрипт, который находится в каталоге /usr/share/eltex-doors/gen_keys.sh
При первом обращении за JWT к Doors, сервис выдаёт два токена: access и refresh. Access token имеет короткий срок жизни и используется непосредственно для доступа к сервисам. Refresh token же живёт значительно дольше и используется только для получения нового access token. Такая схема позволяет быстро прекратить доступ к ресурсам в случае утечки access token. Срок жизни токенов определяется в файле конфигурации сервиса Eltex Doors и по умолчанию составляет 15 минут для access и 30 дней для refresh. По истечении срока жизни access token внешний сервис должен будет обратиться к Eltex Doors за новым access token, предъявив при этом refresh token. |
Установка
...
Для работы сервиса необходима установка схемы на сервер БД:
Блок кода | ||||
---|---|---|---|---|
| ||||
apt install eltex-doors-db |
Установка сервиса:
Блок кода | ||||
---|---|---|---|---|
| ||||
apt install eltex-doors |
Управление сервисом
...
Способы запуска/остановки
Действие | Команда | Ответ | ||||
---|---|---|---|---|---|---|
Проверка состояния | service eltex-doors status | Сервис запущен
Cервис не запущен
| ||||
Запуск сервиса | service eltex-doors start | Сервис успешно запущен
| ||||
Остановка сервиса | service eltex-doors stop | Сервис успешно остановлен
| ||||
Перезапуск сервиса | service eltex-doors restart | Сервис успешно перезапущен
|
Доступные методы API
Eltex Doors предоставляет следующие методы:
- Метод получения JWT (refresh token и access token) по логину и паролю.
- Метод обновления access token по полученному ранее refresh token.
- Метод инвалидации JWT.
- Метод проверки JWT. Метод устарел и не рекомендуется к использованию.
Получение токенов по логину и паролю
Для получения access и refresh token требуется в Eltex Doors отправить POST-запрос в формате JSON на URL /api/signin/
Пример передаваемых параметров в POST запросе
...
language | js |
---|---|
theme | RDark |
со следующим содержимым:
Section | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Подсказка |
---|
Поле metadata становится опциональным с версии SoftWLC 1.17. |
Пример запроса:
Блок кода | ||||
---|---|---|---|---|
| ||||
curl -XPOST -H "Content-type: application/json" -d '{"username": "nasIpuser", "password": "100.112.0.1", "sessionId": "5692549928996308667", "vrf": "1", "clientMac": "FC-45-96-5F-50-AC" } }password"}' 'http://localhost:9097/api/signin/' |
- В случае успеха, сервис ответит:
Section | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- В случае ошибки, сервис ответит:
Section | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Отзыв токенов
Полученный ранее refresh token можно отозвать. Для этого нужно отправить запрос на URL /api/signout
, добавив заголовок авторизации.
Без форматирования |
---|
POST http://localhost:9097/api/signout HTTP/1.1
Accept: application/json
Authorization: Bearer eyJhb... |
Пример запроса:
Блок кода | ||||
---|---|---|---|---|
| ||||
curl -XPOST -H "Authorization: Bearer eyJhb..." 'http://localhost:9097/api/signout/' |
- В случае успеха, сервис ответит:
Блок кода | ||||
---|---|---|---|---|
| ||||
{
"status": "OK",
"accessToken": "Logged out",
"refreshToken": null
} |
- В случае, если токен уже не валиден или неправильный:
Блок кода | ||||
---|---|---|---|---|
| ||||
{
"status": "FAIL",
"error":"Invalid JWT"
} |
Обновление токена
Для обновления access token нужно отправить запрос на /api/signin/token
с заголовком авторизации:
Блок кода |
---|
POST http://localhost:9097/api/signin/token HTTP/1.1
Accept: application/json
Authorization: Bearer eyJhb... |
Пример зарпроса:
Блок кода | ||||
---|---|---|---|---|
| ||||
curl -XPOST -H "Authorization: Bearer eyJhbGc..." 'http://100.110.1.222:9097/api/signin/token/' |
- В случае успеха, сервис ответит:
Блок кода | ||||
---|---|---|---|---|
| ||||
{ "status": "OK", "accessToken": "eyJhbGc...", "accessTokenrefreshToken": "eyJhbGciOiJIUzI1NiJ9eyJhb.eyJzdWIiOiJ1c2VyIiwiYXV0aCI6WyJST0xFX0FETUlOIl0sImlhdCI6MTU1OTcwOTQ2OCwiZXhwIjoxNTU5NzgxNDY4LCJuYXNJcCI6IjEwMC4xMTIuMC4xIiwic2Vzc2lvbklkIjoiNTY5MjU0OTkyODk5NjMwODY2NyIsInZyZiI6IjEiLCJjbGllbnRNYWMiOiJGQy00NS05Ni01Ri01MC1BQyJ9.VQ1NKCcG445eSMz7jOoTGt7PC1HVhTkFxxwWWxdVO3Y." } |
где, status - статус ответа
accessToken - сгенерированный токен
- В случае ошибки, сервис ответит, если токен уже не валиден или неправильный:
Блок кода | ||||
---|---|---|---|---|
| ||||
{ "status": "FAIL", "error":"Invalid username or password"} |
где, status - статус ответа
error - описание ошибки
Конфигурация
...
JWT"
} |
Конфигурация
...
/etc/eltex-doors/application.conf
Основной конфигурационный файл.
Блок кода | ||||
---|---|---|---|---|
|
...
| |||
| ##
| ||
# Mysql datasource properties spring.datasource.url=jdbc:mysql://<<ip_address>>:3306/eltex_doors?useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.username=eltexdoors Логин spring.datasource.password=eltexpassword Пароль spring.flyway.url=jdbc:mysql://localhost:3306/eltex_doors?useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.flyway.user=eltexdoors Логин spring.flyway.password=eltexpassword Пароль ## Eureka settings and starting server port server.port=9097 Порт, который слушает сервис ## Custom application properties ## Token expiration timeout # Use time format HH:mm:ss auth.cron.session.timeout=database { host = localhost port = 3306 name = eltex_doors user = eltexdoors password = eltexpassword pool { # Time to wait for a connection connectionTimeout = 10s # Time to wait for connection validation validationTimeout = 3s min = 1 max = 5 } } # Basic account credentials auth { username = user password = password } # Authentification keys paths keys { private = /etc/eltex-doors/keys/private.pem public = /etc/eltex-doors/keys/public.pem } # Tokens lifetime tokens { clearTimeout = "*/60 * * * * * Период" проверки жизни токена auth.token.expire.timeout=20:00:00 Время жизни токена # Login and password from basic account auth.username=user Логин, для подключения к eltex-doors auth.password=password Пароль, для подключения к eltex-doors # Auth keys paths auth.private.key= lifetime { access = 15m refresh = 30d } } |
- Основные данные для подключения к БД:
Без форматирования |
---|
database {
host = localhost
port = 3306
name = eltex_doors
user = eltexdoors
password = eltexpassword
... |
- Время ожидания подключения к БД:
Без форматирования |
---|
connectionTimeout = 10s |
- Время ожидания валидации:
Без форматирования |
---|
validationTimeout = 3s |
- Минимальное и максимальное количество подключений к БД:
Без форматирования |
---|
min = 1
max = 5 |
- Параметры подключения к auth-service:
Без форматирования |
---|
auth {
username = user
password = password
} |
- Расположение ключей:
Без форматирования |
---|
keys { private = /etc/eltex-doors/keys/private.pem Приватныйpublic ключ, с помощью которого подписывается JWT токен auth.public.key== /etc/eltex-doors/keys/public.pem Открытый ключ, для валидации JWT |
...
} |
- Время очистки БД от просроченных токенов:
Без форматирования |
---|
clearTimeout = "*/60 * * * * *" |
- Время жизни токенов:
Без форматирования |
---|
lifetime {
access = 15m
refresh = 30d
} |
/etc/default/eltex-doors
Файл настройки инициализации сервиса.
Блок кода | ||
---|---|---|
| ||
| ||
# AP Monitoring service # HTTP Port for use by Eltex Doors PORT=9097 # Initial size of Java heap JAVA_INIT_HEAP=8m Количество ОЗУ выделяемой при инициализации 32m # Maximum size of Java heap JAVA_MAX_HEAP=64m Количество ОЗУ выделяемой при работе # 256m # Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-doors" |
- Слушаемый сервисом порт:
Без форматирования |
---|
# HTTP Port for use by Eltex Doors
PORT=9097 |
- Количество памяти, выделяемое приложению при старте сервиса:
Без форматирования |
---|
# Initial size of Java heap
JAVA_INIT_HEAP=32m |
- Максимальное количество памяти, которое может арендовать сервис:
Без форматирования |
---|
# Maximum size of Java heap
JAVA_MAX_HEAP=256m |
- Дополнительные опции запуска java:
Без форматирования |
---|
# Additional arguments to pass to java
JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-doors"
|
/etc/eltex-doors/log4j2.xml
Файл настройки логирования.
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="UTF-8"?> <Configuration monitorInterval="600"> <Properties> <Property name="rootLevel">DEBUG</Property> <Property name="baseDir">/var/log/eltex-doors</Property> <Property name="maxFileSize">5 MB</Property> <Property name="accumulatedFileSize">100 MB</Property> <Property name="lastModified">7d</Property> <Property name="maxCount">10</Property> <Property name="logPattern">%d{ISO8601} [%t] %-5p %logger{1} %C{1}.%M(line:%L). %m%n</Property> <Property name="consoleLevel">${env:CONSOLE_LEVEL:-OFF}</Property> <Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property> <Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property> <Property name="gelfPort">${env:GELF_PORT:-12201}</Property> </Properties> <Appenders> <Console name="STDERR" target="System.err"> <PatternLayout pattern="${logPattern}"/> </Console> <RollingFile name="RollingFile" fileName="${baseDir}/doors.log" filePattern="${baseDir}/log/doors-%i.log.gz"> <PatternLayout pattern="${logPattern}"/> <Policies> <SizeBasedTriggeringPolicy size="${maxFileSize}"/> <OnStartupTriggeringPolicy/> </Policies> <DefaultRolloverStrategy max="${maxCount}"> <Delete basePath="${baseDir}" maxDepth="3"> <IfFileName glob="*/doors-*.log.gz"> <IfAny> <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/> <IfLastModified age="${lastModified}"/> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> <Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-doors" extractStackTrace="true" originHost="%host{fqdn}" maximumMessageSize="8192"> <Field name="thread" pattern="%t"/> <Field name="level" pattern="%level"/> <Field name="severity" pattern="%-5level"/> <Field name="logger" pattern="%logger{1}"/> <Field name="location" pattern="%C{1}.%M(line:%L)"/> </Gelf> </Appenders> <Loggers> <Root level="${rootLevel}"> <AppenderRef ref="RollingFile"/> <AppenderRef ref="STDERR" level="${consoleLevel}"/> <AppenderRef ref="Gelf" level="${gelfLevel}"/> </Root> <Logger name="org.eltex.softwlc.doors" level="INFO"/> <Logger name="org.springframework" level="ERROR"/> <Logger name="org.eclipse.jetty" level="ERROR"/> <Logger name="com.zaxxer" level="ERROR"/> </Loggers> </Configuration> |
- Интервал автоматического перечитывания конфигурации логгера:
Без форматирования |
---|
<Configuration monitorInterval="600"> |
- Базовая директория хранения логов:
Без форматирования |
---|
<Property name="baseDir">/var/log/eltex-doors</Property> |
- Максимально допустимый размер файла (при его превышении создается новый файл, а старый архивируется):
Без форматирования |
---|
<Property name="maxFileSize">5 MB</Property> |
- Суммарный размер логов (текущий файл + архивные). При его превышении наиболее старые файлы будут удаляться:
Без форматирования |
---|
<Property name="accumulatedFileSize">100 MB</Property> |
- Срок хранения логов, файлы модифицированные раннее этого срока будут удаляться:
Без форматирования |
---|
<Property name="lastModified">7d</Property> |
- Максимальное количество архивных файлов, при его превышении наиболее старые файлы будут перезаписываться:
Без форматирования |
---|
<Property name="maxCount">10</Property> |
- Блок настройки перенаправления логов в Graylog (уровень логирования, адрес, порт):
Без форматирования |
---|
<Property name="gelfLevel">OFF</Property>
<Property name="gelfHost">udp:lab3-test.eltex.loc</Property>
<Property name="gelfPort">12201</Property> |
- Уровень логирования:
Без форматирования |
---|
<Property name="rootLevel">DEBUG</Property> |