Описание
Eltex-doors является сервисом аутентификации, который выполняет проверку подлинности пользователя, созданием токена и верификацией токена.
Eltex-doors формирует токен JWT на основе переданного POST-запроса содержащий логин, пароль, а также метаданные.
JWT(JSON Web Token) - JSON объект, определен в RFC 7519
Сгенерированные токены хранятся в БД eltex-doors,
таблица auth_token
. По истечению, заданного в конфигурационном файле, времени(token.expire.timeout), выполняется очистка устаревших токенов из БД.
Параметры "срок действия токена{iat}" и "время создания токена{exp}" указаны в payload токена и можно узнать выполнив декодирование токена.
С версии 1.15 появилась возможность валидировать токены без дополнительного обращения к doors. При установке или обновлении генерируются открый и закрытый ключ, которые по умолчанию размещаются в каталоге /etc/eltex-doors/keys/.
Для того чтобы к приватному ключу имели доступ только доверенные сервисы, ключам назначаются права 440 и принадлежат группе eltex:
-r--r----- 1 root eltex 1704 Sep 19 10:44 private.pem -r--r----- 1 root eltex 451 Sep 19 10:44 public.pem
private.pem - ключ необходимый для подписи JWT токенов
public.pem - ключ необходимый сервисам для валидации JWT токенов
Если по какой-либо причине необходимо пересоздать ключи, то можно запусить скрипт, который находится в каталоге /usr/share/eltex-doors/gen_keys.sh
После генерации новых ключей, необходимо ключ public.pem заново передать сервисам
Доступные методы API: /api/signin/
Пример передаваемых параметров в POST запросе
{ "username": "user", "password": "password", "metadata": { "nasIp": "100.112.0.1", "sessionId": "5692549928996308667", "vrf": "1", "clientMac": "FC-45-96-5F-50-AC" } }
- В случае успеха, сервис ответит:
{ "status": "OK", "accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiYXV0aCI6WyJST0xFX0FETUlOIl0sImlhdCI6MTU1OTcwOTQ2OCwiZXhwIjoxNTU5NzgxNDY4LCJuYXNJcCI6IjEwMC4xMTIuMC4xIiwic2Vzc2lvbklkIjoiNTY5MjU0OTkyODk5NjMwODY2NyIsInZyZiI6IjEiLCJjbGllbnRNYWMiOiJGQy00NS05Ni01Ri01MC1BQyJ9.VQ1NKCcG445eSMz7jOoTGt7PC1HVhTkFxxwWWxdVO3Y" }
где, status - статус ответа
accessToken - сгенерированный токен
- В случае ошибки, сервис ответит:
{"status":"FAIL","error":"Invalid username or password"}
где, status - статус ответа
error - описание ошибки
Конфигурация
Конфигурационный файл располагается по адресу /etc/eltex-doors/application.properties
## 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=*/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=/etc/eltex-doors/keys/private.pem Приватный ключ, с помощью которого подписывается JWT токен auth.public.key=/etc/eltex-doors/keys/public.pem Открытый ключ, для валидации JWT
Файл настройки логирования /etc/eltex-doors/log4j2.xml
Файл настройки инициализации сервиса /etc/default/eltex-doors
# AP Monitoring service # Initial size of Java heap JAVA_INIT_HEAP=8m Количество ОЗУ выделяемой при инициализации # Maximum size of Java heap JAVA_MAX_HEAP=64m Количество ОЗУ выделяемой при работе # Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-doors"