...
Блок кода | ||||
---|---|---|---|---|
| ||||
root@ubuntu:~# apt-get install eltex-papaya |
Остановка/запуск сервиса
Действие | Команды | Ответ | ||||
---|---|---|---|---|---|---|
Проверка состояния | service eltex-papaya status systemctl status eltex-papaya.service | Сервис запущен
Cервис не запущен
| ||||
Запуск сервиса | service eltex-papaya start systemctl start eltex-papaya.service | Сервис успешно запущен
| ||||
Остановка сервиса | service eltex-papaya stop systemctl stop eltex-papaya.service | Сервис успешно остановлен
| ||||
Перезапуск сервиса | service eltex-papaya restart systemctl restart eltex-papaya.service | Сервис успешно перезапущен
|
Доступные методы API
Eltex-papaya предоставляет следующие методы:
...
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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 |
...
Блок кода | ||
---|---|---|
| ||
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 |
...
Блок кода | ||
---|---|---|
| ||
<Loggers> <Root level="debuginfo"> |
Настройки инициализации сервиса
...
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
# 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 |
...
Блок кода | ||||
---|---|---|---|---|
| ||||
root@ubuntu:~# docker-compose up -d |
Настройка SoftWLC
Настройка интеграции | ||||||||||||||||||
Конструкор порталов | Поключение к сервису eltex-papaya |
2. Проверить значения параметров модуля mobileID
| ||||||||||||||||
Включение нового типа авторизации | Проверить, что новая настройка сохранилавь в БД:
2. По ID портала найти ID его группы конфигураций:
3. Проверить, что авторизация по Mobile ID включена:
| |||||||||||||||||
Проверка авторизации через MobileID | ||||||||||||||||||
Портал | Авторизация с телефонным номером Теле2 с поддержкой Mobile ID. |
2. Перейти на страницу Портала. 3. Выбрать авторизацию по номеру телефона. 4. Ввести телефонный номер Теле2 и нажать кнопку "MobileID". 5. Должно появиться системное уведомление о подключении к сети. 6. Нажать "ок" - должен появиться доступ в сеть. 7. Нажать "отмена" либо ничего не нажимать - редирект на выбор способа авторизации. | ||||||||||||||||
Авторизация с телефонным номером Теле2 без поддержки Mobile ID. | Старые сим-карты Теле2 могут не поддерживать Mobile D, для такого случая предусмотрен сценарий, при котором пользователю Mobile ID присылает смс-сообщение с кодом.
2. Перейти на страницу Портала. 3. Выбрать авторизацию по номеру телефона. 4. Ввести телефонный номер Теле2 и нажать кнопку "MobileID". 5. Придет SMS-сообщение с кодом для авторизации. 6. Если код авторизации не пришел, его можно запросить повторно. 7. В случае превышения числа попыток ввода кода, будет редирект на страницу выбора способа авторизации. | |||||||||||||||||
Авторизация с телефонным номером других операторов |
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-пакетов
...
Блок кода | ||
---|---|---|
| ||
servers: [100.110.1.201:5703, 100.110.2.50:57025703] |
Параметры необходимо настроить на всех нодах и перезапустить сервис на всех серверах-участниках.
...
Блок кода | ||||
---|---|---|---|---|
| ||||
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" } |
...