Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Описание

...

Микросервис предназначенный для деаутентификации сессии и удаления mac-адреса пользователя.  Eltex-disconnect взаимодействует с сервисом PCRF, для непосредственной отправки команды на удаление сессии пользователя.

Для валидации JWT-токена на основе публичного ключа, необходимо указать расположение ключа, а также ключ public.pem должен принадлежать группе eltex и иметь права 440.  Ключ генерирует сервис doors.

...

Подсказка

При изменении ключа необходимо перезапустить сервис disconnect.

code


Управление сервисом

...

Действие

...

Команда

...

Ответ

...

Проверка состоянияservice eltex-disconnect-service

...

Доступные методы API: disconnect

  • В случае успеха сервис Eltex-disconnect ответит
Блок кода
languagejs
themeRDark
{
    "success" : true
}
  • При ошибке ответ будет следующим:
Блок кода
languagejs
themeRDark
{
    "success" : false, 
    "fail" : "описание возникшей ошибки" 
}

Описание работы

...

status

Сервис запущен:

Подсказка

Active: active (running)

Cервис не запущен:

Предупреждение

Active: failed


Запуск сервисаservice eltex-disconnect-servicestart

Сервис успешно запущен:

Подсказка

Active: active (running)


Остановка сервисаservice eltex-disconnect-service stop

Сервис успешно остановлен:

Подсказка

Active: failed


Перезапуск сервисаservice eltex-disconnect-service restart

Сервис успешно перезапущен:

Подсказка

Active: active (running)



Принцип работы

...

Сервис eltex-disconnect ожидает  на порту 9096 GET-запросв формате:

Без форматирования
http://

...

<IP-address>:9096/disconnect?token=

...

<token>

Пример запроса:

Блок кода
themeRDark
http://192.168.49.110:9096/disconnect?token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiYXV0aCI6WyJST0xFX0FETUlOIl0sImlhdCI6MTU1OTI3OTU4MCwiZXhwIjoxNTU5MzUxNTgwLCJuYXNJcCI6IjEwMC4xMTIuMC4xIiwic2Vzc2lvbklkIjoiNTY5MjU0OTkyODk5NjMwNzk2NCIsInZyZiI6IjEiLCJjbGllbnRNYWMiOiJGQy00NS05Ni01Ri01MC1BQyJ9.fWhOkgFo_rLd2mB9_70HotPH9LlGh7SuT1-qDQvv77U

После получения GET-запроса от внешнего сайта,  сервис eltex-disconnect выполняет валидацию jwt-токена на основе публичного ключа для проверки того, что данные действительно , с целью проверки действительно ли данные отправлены авторизованным источником.

Следующий этап , это - декодирование токена, от куда откуда извлекается payload(метаданные) сессии пользователя, которого необходимо деаунтентифицировать.

Пример декодированного токена:

Section


Column
width40


Блок кода
languagebash
themeRDark
{
  "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 адрес пользователя

...



Column


"sub" - пользователь;

"iat" - время создания токена;

"exp" - время жизни токена;

"nasIp" - nas устройства;

"sessionId" - уникальная сессия пользователя;

"vrf" - Virtual Routing and Forwarding;

"clientMac" - mac-адрес пользователя.



Далее происходит отправка GET-запроса disconnect на API PCRF, в котором передаются необходимый набор параметров: VRF, Mac, sessionId, nasIp.

Пример запроса:

Блок кода
languagebash
themeRDark
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-адреса.

Конфигурация

...

  • В случае успеха сервис ответит:
Блок кода
languagejs
themeRDark
{
    "success" : true
}
  • При ошибке ответ будет следующим:
Блок кода
languagejs
themeRDark
{
    "success" : false, 
    "fail" : "описание возникшей ошибки" 
}


Конфигурация

...

/etc/eltex-disconnect-service/application.conf

Основной конфигурационный файл.

noformat
Блок кода
languagexml
title/etc/eltex-disconnect-service/application.conf
collapsetrue
pcrf {
  host = localhost			адрес
сервиса PCRF // connection port = 7070				порт, который слушает PCRF
  timeout = 100				время ожидания ответа
}

validation { 
  (7070 is default)
  port = 7070
  // timeout (you can use ns, us, ms, s, m and h letters)
  // consult with HOCON duration format for more information
  timeout = 10s

  // pool configuration
  pool {
    // minimum idle objects in pool
    min = 1
    // maximum pool size
    max = 20
    // timeout to retrieve an object from pool
    waitTimeout = 5s
  }
}

// JWT validation. You need a key from Eltex Doors.
// Or you could generate it yourself.
validation {
  public_key = /etc/eltex-doors/keys/public.pem
  • Настройки подключения к PCRF:
Без форматирования
pcrf {
 путь доhost публичного ключа

...

= localhost        IP-адрес сервера
  port = 7070             Порт сервера
  timeout = 10s           Время ожидания ответа
  pool {                  Настройки пула
    min = 1
    max = 20
    waitTimeout = 5s
  }
}
  • Путь к публичному ключу:
Без форматирования
validation {
  public_key = /etc/eltex-doors/keys/public.pem


/etc/default/eltex-disconnect-service

...

Cодержит параметры, необходимые для инициализации сервиса.

noformat
Блок кода
languagexml
title/etc/default/eltex-disconnect-service
collapsetrue
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"
  • Слушаемый порт:
Без форматирования
PORT=9096
  • Настройка памяти, выделяемой на работу сервиса:

Без форматирования
JAVA_INIT_HEAP=4m
JAVA_MAX_HEAP=32m
  • Дополнительные настройки инициализации сервера:
Без форматирования
JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-disconnect-service"


/etc/eltex-disconnect-service/log4j2.xml

Файл настройки логирования.

Блок кода
languagexml
title/etc/eltex-disconnect-service/log4j2.xml
collapsetrue
<?xml version="1.0" encoding="UTF-8"?>

<Configuration monitorInterval="600">
    <Properties>
        <Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property>

        <Property name="baseDir">/var/log/eltex-disconnect-service</Property>
        <Property name="maxFileSize">20 MB</Property>
        <Property name="accumulatedFileSize">100 MB</Property>
        <Property name="lastModified">4d</Property>
        <Property name="maxCount">20</Property>
        <Property name="logPattern">%d{ISO8601} [%t] %-5p %logger{12} %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}/disconnect-service.log"
                     filePattern="${baseDir}/log/disconnect-service-%i.log.gz">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${maxFileSize}"/>
            </Policies>
            <DefaultRolloverStrategy max="${maxCount}">
                <Delete basePath="${baseDir}" maxDepth="3">
                    <IfFileName glob="*/disconnect-service-*.log.gz">
                        <IfLastModified age="${lastModified}"/>
                        <IfAny>
                            <IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
                            <IfAccumulatedFileCount exceeds="${maxCount}"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-disconnect-service"
              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{12}"/>
            <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.springframework" level="ERROR"/>

        <Logger name="org.apache" level="OFF"/>

    </Loggers>

</Configuration>
  • Автоматическое перечитывание конфигурации логгера:
Без форматирования
<Configuration monitorInterval="600">
  • Уровень логирования:
Без форматирования
<Property name="rootLevel">${env:LOG_LEVEL:-INFO}</Property>
  • Базовая директория хранения логов:
Без форматирования
<Property name="baseDir">/var/log/eltex-disconnect-service</Property>
  • Максимально допустимый размер файла (при его превышении создается новый файл. а старый архивируется):
Без форматирования
<Property name="maxFileSize">20 MB</Property>
  • Суммарный размер логов (текущий файл + архивные). При его превышении наиболее старые файлы будут удаляться:
Без форматирования
<Property name="accumulatedFileSize">100 MB</Property>
  • Срок хранения логов, файлы модифицированные раннее этого срока будут удаляться:
Без форматирования
<Property name="lastModified">4d</Property>
  • Максимальное количество архивных файлов, при его превышении наиболее старые файлы будут перезаписываться:
Без форматирования
<Property name="maxCount">7</Property>
  • Блок настройки перенаправления логов в Graylog (уровень логирования, адрес, порт):
Без форматирования
<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>