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

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

Ключ

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

...

Блок кода
languagebash
themeMidnight
root@ubuntu:~# apt-get install eltex-papaya


Остановка/запуск сервиса

ДействиеКомандыОтвет
Проверка состояния

service eltex-papaya status

systemctl status eltex-papaya.service

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

Подсказка

Active: active (running)

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

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

Active: failed


Запуск сервиса

service eltex-papaya start

systemctl start eltex-papaya.service

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

Подсказка

Active: active (running)


Остановка сервиса

service eltex-papaya stop

systemctl stop eltex-papaya.service

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

Подсказка

Active: failed


Перезапуск сервиса

service eltex-papaya restart

systemctl restart eltex-papaya.service

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

Подсказка

Active: active (running)




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

Eltex-papaya предоставляет следующие методы:

...

Блок кода
languageyml
themeRDark
title/etc/eltex-papaya/config/application.yaml
collapsetrue
server:
  port: 9098

portal:
  baseUrl: http://<IP-address_portal>:9000/eltex_portal/
  connectionTimeoutMs: 1000
  totalConnections: 1

jwt:
  configuration:
    algorithm: RS256
    keyLength: 2048
    privateKeyFilePath: "/etc/eltex-papaya/keys/private.key"
    publicKeyFilePath: "/etc/eltex-papaya/keys/public.key"
    keyIdFilePath: "/etc/eltex-papaya/keys/keyId.txt"

discovery:
  cacheTtlSeconds: 600
  url: "<URL_Discovery>"
  clientSecret: "<Client_Secret>"
  clientId: "<Client_ID>"
  redirectUrl: "<URL_Redirect>"

openid:
  configCacheTtlSeconds: 600
  authCacheTtlSeconds: 600
  otpAuthCacheTtlSeconds: 600
  notificationUri: "<URL_Notify>"
  acrValue: "2"
  version: "mc_si_r2_v1.0"


caching:
  # We use this if we want replication. If it's disabled we don't need any network configuration
  replicationEnabled: false
  # The address outside of the NAT network of a Docker Container, for example
  # Leave this section empty and hazelcast chooses it's itself
  publicAddress: ""
  # Port of the public node
  port: 57025703
  # Do we need to propagate to further ports
  portAutoIncrement: false
  # Count of ports to propagate if portAutoIncrement is true
  portCount: 1
  # Available methods are:
  # HOSTNAME - you need to specify the HOSTNAME environment variable inside your container that contains host and
  # can be resolved to an IP Address
  # IP_ADDRESS - you need to specify interfaceIp variable in this configuration or INTERFACE_IP variable in docker
  # environment
  # BIND_TO_ALL - hazelcast tries to bind itself to all known interfaces
  # By Default IP_ADDRESS is used in Deb package and HOSTNAME in Docker environment
  interfaceBindingMethod: "IP_ADDRESS"
  # The IP Address by which we select binding interface in hazelcast.
  # Works only if interfaceBindingMethods is INTERFACE_IP
  interfaceIp: "<IP-address>"
  # List of the member servers of this cache cluster. You can list comma-separated IPv4, IPv6 addresses
  # and resolvable hosts with ports separated by colon. If port not configured - port from configuration parameter below
  # will be used as default for all cluster nodes.
  # Not resolvable hosts will be logged in error log.
  servers:
    # List hosts, ips here
    []

spring:
  cloud:
    discovery:
      client:
        composite-indicator:
          enabled: false

management:
  health:
    defaults:
      enabled: false
  trace:
    http:
      enabled: true
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        # Actuator info
        # Useful for inspecting deployed beans, watching metrics, watching caches info
        # Also we can use it to create heapdump, threaddump, shutdown application and etc.
        include: health, beans, info, caches, prometheus, env, threaddump, heapdump, configprops, httptrace

...

Блок кода
languageyml
caching:
  replicationEnabled: false                     # Статус активации репликации
  multicastEnabled: false                       # Статус активации мультикаста
  autoDetectionEnabled: false                   # Cтатус активации автообнаружение нод
  publicAddress: ""                             # Публичный адрес текущей ноды
  port: 57025703                                    # Порт доступа к ноде
  portAutoIncrement: false                      # Автоинкремент портов
  portCount: 1                                  # Максимум портов для автоинкремента;
  interfaceBindingMethod: "IP_ADDRESS"          # Метод биндинга. Доступные методы:
                                                ##  HOSTNAME — для этого режима необходимо задать переменную окружения HOSTNAME, которая может зарезолвиться в IP-адрес
                                                ##  IP_ADDRESS — для этого режима необходимо задать значение переменной CACHING_INTERFACEIP
                                                ##  BIND_TO_ALL — в этом режиме Hazelcast попытается использовать все доступные интерфейсы
                                                ## IP_ADDRESS используется для Deb пакетов, HOSTNAME используется в Docker environment
  interfaceIp: "127.0.0.1"                      # IP-адрес интерфейса для биндинга
  servers:
    []                                          # Cписок членов кластера в виде IPv4, IPv6

...

Блок кода
languageyml
    <Loggers>
        <Root level="debuginfo">


Настройки инициализации сервиса

...

Блок кода
languageyml
themeRDark
title.env
# Docker-репозиторий, где находится образ eltex-papaya.
# Для разработки: lab3.eltex.loc:5000
# Публичный: hub.eltex-co.ru/softwlc
ELTEX_HUB=hub.eltex-co.ru/softwlc

# Версия сервиса, которую нужно развернуть
# На feature-ветке — вида 1.23-<название_ветки>
SWLC_VERSION=1.23-<tag>

# Внешний порт контейнера eltex-papaya
PAPAYA_SERVER_PORT=9098
CACHING_PORT=5702
# Порт для удаленного дебага
PAPAYA_DEBUG_PORT=5015

# URL сервиса Captive Portal, на котором будет происходить аутентификация пользователей
PORTAL_BASEURL=http://<IP-address_portal>:9000/eltex_portal/
# Таймаут подключения к Captive Portal
PORTAL_CONNECTIONTIMEOUTMS=1000
# Число одновременных подключений к Captive Portal
PORTAL_TOTALCONNECTIONS=1
# Алгоритм генерации ключей
JWT_CONFIGURATION_ALGORITHM=RS256
# Длина ключа в битах
JWT_CONFIGURATION_KEYLENGTH=2048
# Путь к приватному ключу
JWT_CONFIGURATION_PRIVATEKEYFILEPATH=/etc/eltex-papaya/keys/private.key
# Путь к публичному ключу
JWT_CONFIGURATION_PUBLICKEYFILEPATH=/etc/eltex-papaya/keys/public.key
# Путь к файлу, содержащему keyId ключа
JWT_CONFIGURATION_KEYIDFILEPATH=/etc/eltex-papaya/keys/keyId.txt
# Discovery
# Время жизни записи в кэше запросов Discovery
DISCOVERY_CACHETTLSECONDS=600
# Адрес сервиса Discovery
DISCOVERY_URL=<URL_Discovery>
# Секрет для авторизации
DISCOVERY_CLIENTSECRET="<Client_Secret>"
# Идентификатор клиента для авторизации
DISCOVERY_CLIENTID="<Client_ID>"
# Зарегистрированный URL для перенаправления
DISCOVERY_REDIRECTURL="<URL_Redirect>"

# Open ID
# Время жизни записи в кэше конфигураций MobileID
OPENID_CONFIGCACHETTLSECONDS=600
# Время жизни записи в кэше авторизаций MobileID
OPENID_AUTHCACHETTLSECONDS=600
# Время жизни записи в кэше авторизаций по MobileID OTP
OPENID_OTPAUTHCACHETTLSECONDS=600
# Адрес для обратных уведомлений от IDGW
OPENID_NOTIFICATIONURI=http://<PUBLIC_IP>:9098/notify
# Список запрашиваемых LoA
OPENID_ACRVALUE=2
# Версия приложения MobileID
OPENID_VERSION=mc_si_r2_v1.0

# Настройки Hazelcast
# Репликация
CACHING_REPLICATIONENABLED=false
# Публичный адрес текущей ноды
CACHING_PUBLICADDRESS=
# Порт доступа к ноде
CACHING_PORT=57025703
# Автоинкремент портов
CACHING_PORTAUTOINCREMENT=false
# Максимум портов для автоинкремента
CACHING_PORTCOUNT=1
# Доступные методы биндинга:
# HOSTNAME - для этого режима необходимо задать переменную окружения HOSTNAME которая может зарезолвиться в IP адрес
# IP_ADDRESS - для этого режима необходимо задать значение переменной CACHING_INTERFACEIP
# BIND_TO_ALL - в этом режиме Hazelcast попытается использовать все доступные интерфейсы
# IP_ADDRESS используется для Deb пакетов, HOSTNAME используется в Docker environment
CACHING_INTERFACEBINDINGMETHOD=
CACHING_INTERFACEIP=
# список членов кластера в виде IPv4, IPv6 или hostname
CACHING_SERVERS=

# Изначальный размер хипа
PAPAYA_JAVA_INIT_HEAP=8m

# Максимальный размер хипа
PAPAYA_JAVA_MAX_HEAP=64m

# Путь, куда нужно складывать heap-dump в случае падения приложения
PAPAYA_HEAP_DUMP_PATH=/var/log/eltex-papaya

# Внутренний путь до конфигурации сервиса
PAPAYA_CONFIG_DIR=/etc/eltex-papaya

# Настройки логирования
PAPAYA_LOG_LEVEL=INFO
PAPAYA_CONSOLE_LEVEL=INFO

# Настройки Graylog
# Вместо <graylog_server_ip> нужно указать настоящий адрес сервера Graylog или localhost
GELF_LEVEL=OFF
GELF_HOST=udp:localhost
GELF_PORT=12201

...

Блок кода
languagebash
themeRDark
root@ubuntu:~# docker-compose up -d


Настройка SoftWLC

Настройка интеграции

Конструкор порталовПоключение к сервису eltex-papaya

Image Modified

  1. Проверить, что в БД mysql ELTEX_PORTAL в таблице property_groups появился новый модуль mobileID:
Блок кода
languagesql
mysql> select * from ELTEX_PORTAL.property_groups;
+----+-----------+---------------+
| id | portal_id | module_name   |
+----+-----------+---------------+
|  2 |      NULL | alert         |
|  5 |      NULL | bras          |
|  1 |      NULL | epadmin       |
| 10 |      NULL | mercury       |
| 18 |      NULL | mobileid      |

2. Проверить значения параметров модуля mobileID

Блок кода
languagesql
mysql> select * from ELTEX_PORTAL.properties where group_id = 18;
+----------+-----------------------+---------------------------+---------------------+
| group_id | name                  | value                     | updated             |
+----------+-----------------------+---------------------------+---------------------+
|       18 | api.url               | http://100.110.1.201:9098 | 2022-06-30 07:40:55 |
|       18 | connection.timeout    | 5                         | 2022-06-30 07:40:55 |
|       18 | enabled               | true                      | 2022-06-30 07:40:55 |
|       18 | max.total.connections | 300                       | 2022-06-30 07:40:55 |
+----------+-----------------------+---------------------------+---------------------+
4 rows in set (0.00 sec)



Включение нового типа авторизации

Image Modified

Проверить, что новая настройка сохранилавь в БД:

  1.  Найти ID портала:
Блок кода
languagesql
mysql> select * from ELTEX_PORTAL.portals;
+----+---------+-------+
| id | name    | scope |
+----+---------+-------+
|  1 | default |       |
+----+---------+-------+
1 row in set (0.00 sec)

2. По ID портала найти ID его группы конфигураций:

Блок кода
languagesql
mysql> select * from ELTEX_PORTAL.property_groups where portal_id = 1 and module_name = 'config-module';
+----+-----------+---------------+
| id | portal_id | module_name   |
+----+-----------+---------------+
| 15 |         1 | config-module |
+----+-----------+---------------+
1 row in set (0.00 sec)

3. Проверить, что авторизация по Mobile ID включена:

Блок кода
languagesql
mysql> select * from ELTEX_PORTAL.properties where group_id = 15 and name = 'auth.method.mobileId';
+----------+----------------------+-------+---------------------+
| group_id | name                 | value | updated             |
+----------+----------------------+-------+---------------------+
|       15 | auth.method.mobileid | true  | 2022-06-21 12:35:02 |
+----------+----------------------+-------+---------------------+
1 row in set (0.00 sec)


Проверка авторизации через MobileID

ПорталАвторизация с телефонным номером Теле2 с поддержкой Mobile ID.

Image ModifiedImage ModifiedImage ModifiedImage Modified

  1. Подключиться к SSID с порталом, для которого настроена авторизация через MobileID.

2. Перейти на страницу Портала.

3. Выбрать авторизацию по номеру телефона.

4. Ввести телефонный номер Теле2 и нажать кнопку "MobileID".

5. Должно появиться системное уведомление о подключении к сети.

6. Нажать "ок" - должен появиться доступ в сеть.

7. Нажать "отмена" либо ничего не нажимать - редирект на выбор способа авторизации.


Авторизация с телефонным номером Теле2 без поддержки Mobile ID.

Image ModifiedImage ModifiedImage ModifiedImage ModifiedImage ModifiedImage Modified

Старые сим-карты Теле2 могут не поддерживать Mobile D, для такого случая предусмотрен сценарий, при котором пользователю Mobile ID присылает смс-сообщение с кодом.

  1. Подключиться к SSID с порталом, для которого настроена авторизация через MobileID.

2. Перейти на страницу Портала.

3. Выбрать авторизацию по номеру телефона.

4. Ввести телефонный номер Теле2 и нажать кнопку "MobileID".

5. Придет SMS-сообщение с кодом для авторизации. 

6. Если код авторизации не пришел, его можно запросить повторно.

7. В случае превышения числа попыток ввода кода, будет редирект на страницу выбора способа авторизации.


Авторизация с телефонным номером других операторов

Image ModifiedImage ModifiedImage Modified

  1. Подключиться к SSID с порталом, для которого настроена авторизация через MobileID.

2. Перейти на страницу Портала.

3. Выбрать авторизацию по номеру телефона.

4. Ввести телефонный номер любого другого и нажать кнопку "MobileID".

5. На портале должна появиться ошибка и предложение использовать другой способ авторизации.


Расшифровка логов портала

Неуспешная авторизация, papaya не отвечает MobailID (подробнее в логах papaya).ERROR org.eltex.portal.service.PapayaServiceImpl PapayaServiceImpl.postMobileIdAuthentication(line:56). Papaya not answered success to MobileID auth request. Details: Code: 500. Message: Internal Server Error
Успешная авторизация.DEBUG org.eltex.portal.controller.MobileIdController MobileIdController.setMobileIdStatus(line:51). MobileID user with id 44189e91-45bc-430a-ad01-66baccc4233d successfully authenticated
Успешная авторизация по SMS-коду.DEBUG org.eltex.portal.controller.MobileIdController MobileIdController.getSmsCodeStatus(line:121). MobileID user with MAC a4:45:19:0b:8c:2e successfully authenticated
Начало OTP-сессии для устройства с mac-адресом.DEBUG org.eltex.portal.controller.MobileIdController MobileIdController.getAuthenticationStatus(line:206). For user 00:00:00:ff:dd:dd started an MobileID OTP Session. Showing code enter form
Неуспешная авторизация, подробнее в логах papaya.ERROR org.eltex.portal.controller.MobileIdController MobileIdController.setMobileIdStatus(line:60). Authentication failed for authReqId: 3fcea8a7-b9a6-4118-9e01-5de02795c7cd. Status: FAILED
Сессия пользователя не найдена для проверки SMS-кода - сессия истекла на стороне MobileID.ERROR org.eltex.portal.service.PapayaServiceImpl PapayaServiceImpl.checkSmsStatus(line:154). Cannot check SMS status for device: null
Пользователь не подтвердил свою личность, статус аутентификации - не подтверждён (не нажал "ОК", не ввёл пин-код).DEBUG org.eltex.portal.controller.MobileIdController MobileIdController.getAuthenticationStatus(line:223). User a4:45:19:0b:8c:2e is not authenticated due some unknown error of MobileID. Redirecting to index and showing error
Нельзя начать OTP-сессию для пользователя. Он либо давно ушёл с портала, попал на OTP очень поздно, либо запросил новую сессию в MobileID.ERROR org.eltex.portal.service.PapayaServiceImpl PapayaServiceImpl.requireSmsCodeFromUser(line:124). Can't start OTP session for authReqId a37c6178-1502-486c-b0a4-012e94145314. User MAC not found.
Не удалось проставить статус FAILED, так как пользователь уже ушёл с портала, либо получил новую сессию в MobileID.ERROR org.eltex.portal.service.PapayaServiceImpl PapayaServiceImpl.authenticationFail(line:107). Can't fail MobileID user authentication. Mac not found by 18d0c694-9bdf-42ad-851e-a30cd4d430a0. Current status is: FAILED


Расшифровка логов papaya

Пользователь отклонил системное уведомление о входе на портал, либо оператор не смог его прислать.OpenIdAuthorizationService.processNotifyRequest$suspendImpl(line:145). User not authorized because of: authorization_error:user denies the request or authentication fails
Слишком долго ждали нажатия "ОК", либо вовсе его не нажали. Неуспешная авторизация.OpenIdAuthorizationService.processNotifyRequest$suspendImpl(line:145). User not authorized because of: authorization_error:Subscriber consent waiting time expired
Получено уведомление о статусе авторизации пользователя MobileID. Внутри ID сессии и номер телефона, если пользователь находится в кэше.OpenIdAuthorizationService.processNotifyRequest$suspendImpl(line:143). Received notify with request id 3485f838-9f7c-4349-9f54-a35d6f8ab49f. Phone 79585150889
Успешно отправили запрос на авторизацию пользователя с номером телефона в MobileID. Ждём уведомления от MobileID.OpenIdAuthorizationService.processMobileIdAuth$suspendImpl(line:198). Auth success for 79585150889. Waiting for auth notification

Получили от портала запрос на авторизацию с представленным номером телефона.

Замечание: нельзя одновременно авторизоваться с одним номером телефона на двух устройствах. MobileID держит только одну сессию за время, так что на одном из устройств будет неуспех.

OpenIdAuthorizationService.processMobileIdAuth$suspendImpl(line:184). Received auth request for phone 79585150889
Ответ на запрос проверки SMS-кода по схеме Пользователь -> Портал -> Папайа -> MobileID. В данном случае введённый SMS-код верный.OpenIdAuthorizationService.processMobileIdOtpAuth$suspendImpl(line:241). SMS status is correct for c8f4e1a4-0a71-4eaf-bae5-74491c2076cd : 79930086782
Получен SMS-код от портала на проверку в MobileID.OpenIdAuthorizationService.processMobileIdOtpAuth$suspendImpl(line:222). Received sms code from portal service. Phone 79930086782
Статус проверки SMS - введённый код неверный.penIdAuthorizationService.processMobileIdOtpAuth$suspendImpl(line:241). SMS status is incorrect for c8f4e1a4-0a71-4eaf-bae5-74491c2076cd : 79930086782
Код из SMS неверный. Оставшееся количество попыток: 2.
Это сообщение, которое приходит в папаю из MobileID.
penIdAuthorizationService$performOtpAuthRequest$2.invokeSuspend(line:128). Error while sending auth request to MobileID platform 5135:FORBIDDEN: remaining attempts: 2
Сообщение от MobileID - превышено число попыток проверки SMS-кода.OpenIdAuthorizationService$performOtpAuthRequest$2.invokeSuspend(line:128). Error while sending auth request to MobileID platform 5136:LIMIT_REACHED
MobileID открыл сессию OTP для пользователя с представленным номером. Ожидаем ввода пользователя на портале, после этого проверяем SMS-код.OpenIdAuthorizationService.processOtpNotifyRequest$suspendImpl(line:162). Received OTP notify with request id c8f4e1a4-0a71-4eaf-bae5-74491c2076cd. Phone 79930086782
Не можем отправить запрос на авторизацию пользователя с таким номером, так как его оператор не подключен к MobileID, либо не подключен в профиле С-П на Discovery.OpenIdDiscoveryService$sendDiscoveryRequest$2.invokeSuspend(line:61). Can't perform discovery with specified phone 79293810070. Details: 404 NOT_FOUND "Not_Found_Entity:There is no organization with the specified MSISDN"
Превысили число проверок SMS-кода на MobileID. OTP-сессия завершилась неуспешно.OpenIdAuthorizationService.processNotifyRequest$suspendImpl(line:145). User not authorized because of: authorization_error:OTP authentication failed
Исчерпали число попыток для проверки СМС. OTP-сессия после этого закрывается и получаем ошибку авторизации.OpenIdAuthorizationService.processMobileIdOtpAuth$suspendImpl(line:241). SMS status is limit_reached for 185de01e-6637-46d3-92ab-6b4905e13a71 : 79930086782




Настройка кластера

...

Настройка кластера при использовании deb-пакетов

...

Блок кода
languageyml
  servers:
    [100.110.1.201:5703, 100.110.2.50:57025703]

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

...

Блок кода
languagebash
themeRDark
root@ubuntu:~/papaya# curl -X GET http://100.110.1.201:9098/actuator/health/hazelcast | json_pp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   415  100   415    0     0  25937      0 --:--:-- --:--:-- --:--:-- 25937
{
   "details" : {
      "members" : [
         {
            "uuid" : "15e43aae-fe31-4804-bd57-b8a46bcf1bf1",
            "localMember" : false,
            "address" : "[100.110.2.50]:57025703",
            "liteMember" : false,
            "memberVersion" : "4.2.5"
         },
         {
            "localMember" : true,
            "uuid" : "739d7ea4-d6e4-46c3-a86c-080ec2d0fc69",
            "address" : "[100.110.1.201]:57025703",
            "memberVersion" : "4.2.5",
            "liteMember" : false
         }
      ],
      "uuid" : "739d7ea4-d6e4-46c3-a86c-080ec2d0fc69",
      "state" : "ACTIVE",
      "name" : "competent_hermann"
   },
   "status" : "UP"
}

...