Описание
Микросервис предназначенный для деаутентификации сессии и удаления mac адреса пользователя. Eltex-disconnect взаимодействует с сервисом PCRF, для непосредственной отправки команды на удаление сессии пользователя.
Для валидации JWT токена на основе публичного ключа, необходимо указать расположение ключа, а также ключ public.pem должен принадлежать группе eltex и иметь права 440. Ключ генерирует сервис doors.
-r--r----- 1 root eltex 451 Sep 19 14:24 public.pem
При изменении ключа необходимо перезапустить сервис disconnect
systemctl restart eltex-disconnect-service.service
Доступные методы API: disconnect
- В случае успеха сервис Eltex-disconnect ответит
{ "success" : true }
- При ошибке ответ будет следующим:
{ "success" : false, "fail" : "описание возникшей ошибки" }
Описание работы
Сервис Disconnect ожидает на порту 9096 GET - запрос http://{{Ip_address}}:9096/disconnect?token=
{{token}}
Пример запроса:
http://192.168.49.110:9096/disconnect?token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiYXV0aCI6WyJST0xFX0FETUlOIl0sImlhdCI6MTU1OTI3OTU4MCwiZXhwIjoxNTU5MzUxNTgwLCJuYXNJcCI6IjEwMC4xMTIuMC4xIiwic2Vzc2lvbklkIjoiNTY5MjU0OTkyODk5NjMwNzk2NCIsInZyZiI6IjEiLCJjbGllbnRNYWMiOiJGQy00NS05Ni01Ri01MC1BQyJ9.fWhOkgFo_rLd2mB9_70HotPH9LlGh7SuT1-qDQvv77U
После получения GET запроса от внешнего сайта, сервис eltex-disconnect выполняет валидацию jwt токена на основе публичного ключа для проверки того, что данные действительно отправлены авторизованным источником.
Следующий этап, это декодирование токена, от куда извлекается payload(метаданные) сессии пользователя которого необходимо деаунтентифицировать.
Пример декодированного токена:
{ "sub": "user", "auth": [ "ROLE_ADMIN" ], "iat": 1559279580, "exp": 1559351580, "nasIp": "100.112.0.1", "sessionId": "5692549928996307964", "vrf": "1", "clientMac": "FC-45-96-5F-50-AC" }
Описание полей payload токена
sub - пользователь iat - время создания токена exp - время жизни токена nasIp - nas устройства sessionId - уникальная сессия пользователя vrf - Virtual Routing and Forwarding clientMac - mac адрес пользователя
И происходит отправка get запроса disconnect на API PCRF, в котором передаются необходимый набор параметров: VRF, Mac, sessionId, nasIp
Пример запроса:
GET http://127.0.0.1:7070/account/disconnect?session=5692549928996307974&nas_ip=100.112.0.1&vrf=1&single=false&mac=FC-45-96-5F-50-AC&remove_mac=true
PCRF выполняет необходимые действия: деаунтентификация и удаление mac адреса.
Конфигурация
Конфигурационный файл сервиса располагается по адресу /etc/eltex-disconnect-service/application.conf
pcrf { host = localhost адрес сервиса PCRF port = 7070 порт, который слушает PCRF timeout = 100 время ожидания ответа } validation { public_key = /etc/eltex-doors/keys/public.pem путь до публичного ключа
Файл настройки логирования /etc/eltex-disconnect-service/log4j2.xml
Файл настройки инициализации сервиса /etc/default/eltex-disconnect-service
PORT=9096 Порт, который слушает сервис # Initial size of Java heap JAVA_INIT_HEAP=4m Количество ОЗУ выделяемой при инициализации # Maximum size of Java heap JAVA_MAX_HEAP=32m Количество ОЗУ выделяемой при работе # Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-disconnect-service