Skip to main content
Version: Indeed Access Manager 9.4

Indeed AM Express Provider

Indeed AM Express Provider предназначен для аутентификации пользователей через push-уведомления в мессенджере eXpress. Процесс аутентификации выглядит следующим образом: бот отправляет запрос на подтверждение входа в приложение-мессенджер, где пользователь может подтвердить или отклонить попытку входа.

Для установки и настройки Express Provider необходимы следующие компоненты:

  • Express Service — веб-сервер, выполняющий роль прокси между Access Manager и Express Bot
  • Express Bot — веб-сервер для взаимодействия с Express Service и мессенджером eXpress (CTS)
Идентификатор провайдера
{EC5B9E55-CF50-43D8-BAC8-19ECDC2B2BE7}

Установка и настройка провайдера

Важно

В инфраструктуре с несколькими серверами Core Server установите провайдер на каждом из них.

Для корректной работы провайдера Express убедитесь, что установлен только один экземпляр Express Service, даже если в инфраструктуре используется несколько серверов Core Server.

Предварительные требования

Перед установкой и настройкой Indeed AM Express Provider убедитесь, что:

  • Настроена интеграция с Corporate Transport Server (CTS) и создан бот в CTS
  • У пользователя указан email в каталоге пользователей — поиск пользователя для регистрации производится по email

Настройка переменных окружения

Внесите изменения в переменных окружения в зависимости от того, где вы планируете установить Express Service.

  1. Откройте файл am/.env.
  2. В переменной COMPOSE_PROFILES добавьте значения express,express-service,express-bot.
  3. В переменной COMPOSE_FILE добавьте значения express-bot.docker-compose.yml и express-service.docker-compose.yml.
  4. Сохраните изменения.

Настройка Core Server

  1. На хосте с Core Server откройте файл core-server.docker-compose.yml.

  2. В секции depends_on раскомментируйте строки:

    #      auth-express:
    # condition: service_completed_successfully
  3. В секции volumes раскомментируйте следующие строки:

    • # - auth-express:/opt/Indeed-Id/Providers/.net/Express:ro,Z
    • # - ./ssl/client/express-client.pfx:/tmp/am_user/.dotnet/corefx/cryptography/x509stores/my/express-client.pfx:ro,Z
  4. Раскомментируйте всю секцию:

    #  auth-express:
    # container_name: auth-express
    # image: nexus.indeed-id.hq:5050/am/core-server/auth/express:${TAG}
    # profiles:
    # - express
    # extends:
    # file: common-services.docker-compose.yml
    # service: auth-provider-base
    # volumes:
    # - auth-express:/opt/Indeed-Id/Providers/.net/Express:ro
  5. В следующей далее секции volumes раскомментируйте строку:

    # auth-express:
  6. Сохраните изменения.

Загрузка Docker-образов

Загрузите Docker-образы Express из дистрибутива:

cd am_images
for f in express*.tar.gz; do docker load -i "$f"; done

Генерация служебных сертификатов

Создайте служебные сертификаты для защиты коммуникации между компонентами.

Примечание

При установке компонентов на разных хостах убедитесь, что необходимые сертификаты размещены на каждом хосте согласно инструкции.

  1. Чтобы сгенерировать сертификат Express Service, запустите следующий скрипт на хосте с Express Service:

    bash ./generateExpressCert.sh

    Результат:

    • Создается сертификат am/ssl/client/express-client.pfx. Отпечаток сертификата автоматически подставляется в конфигурационный файл Express Service app-settings.json.
    • Генерируется приватный ключ express.key и отображается отпечаток сертификата. Сохраните отпечаток — он понадобится при настройке провайдера в Management Console.

    После генерации:

    1. Добавьте express-client.pfx на хост с Core Server в каталог am/ssl/client
    2. Добавьте express-client.pfx на хост с Express Bot в каталог am/ssl/client.
  1. На хосте, где планируется установка Express Bot, запустите следующий скрипт:

    bash ./generateExpressBotCert.sh

    Результат:

    • В каталоге /am/ssl/client создаются сертификаты express-bot-client-key.pem, express-bot-client.pem, express-bot-client.pfx.

      Сертификаты express-bot-client-key.pem и express-bot-client.pem понадобятся при настройке бота в CTS.

    • Генерируется приватный ключ express-bot.key и отображается отпечаток сертификата.

    После генерации:

    1. Укажите отпечаток сертификата в конфигурационном файле Express Service app-settings.json в секции Bot:Connection:ClientCertificateThumbprint.
    2. Добавьте сертификат express-bot-client.pfx на хост с Express Service в каталог am/ssl/client.
  2. На хосте с Core Server запустите следующий скрипт:

    bash ./generateCoreCert.sh

    Результат: генерируется клиентский сертификат, который автоматически добавляется в конфигурационный файл Core Server.

    После генерации:

    1. Укажите отпечаток сертификата в конфигурационном файле Express Service app-settings.json в секции AuthenticationServer:ClientCertificate.
    2. Добавьте клиентский сертификат на хост с Express Service в каталог am/ssl/client.
  3. На хостах с Express Service и Express Bot сгенерируйте HTTPS-сертификаты контейнеров для использования внутри сети Docker:

    bash ./generateHttpsCerts.sh

    Результат: в конфигурационных файлах Express Service и Express Bot автоматически заполняется поле Server:Certificates.

    После генерации: в параметре Bot:Connection:ServerCertificateThumbprint укажите отпечаток сертификата reverse_proxy_server.pem.

  4. На хостах с Core Server, Express Service и Express Bot сгенерируйте сертификаты, которым будут доверять контейнеры:

    sudo bash ./prepareCaFile.sh

    Результат: создаются сертификаты am/ssl/ca/trusted_ca.crt, которые содержат список всех добавленных в am/ssl/ca сертификатов открытого ключа. Сертификат trusted_ca.crt, полученный на хосте с Express Bot, потребуется для настройки бота в CTS.

    Примечание

    При изменении состава каталога am/ssl/ca перезапустите скрипт prepareCaFile.sh.

Настройка бота в CTS

  1. Создайте бота в CTS.
  2. Добавьте сертификаты:
    • trusted_ca — персональный SSL CA-сертификат BotX
    • express-bot-client-key.pem — клиентский SSL приватный ключ BotX
    • express-bot-client.pem — клиентский SSL сертификат BotX
  3. Сохраните ID бота и Секретный ключ — они понадобятся для настройки Express Bot.

Настройка HAProxy

На хосте с Express Service:

  1. Откройте файл haproxy.cfg.

    1. Раскомментируйте:
      • строку # acl path-express-service path_beg -i /am/services/express
      • строку # use_backend Express_Service_Backend if path-express-service
      • секцию # Express_Service_Backend
    2. В блоке FrontendHTTPs в строке с http-request reject unless добавьте: || path-express-service.
  2. Откройте файл haproxy.docker-compose.yml и раскоментируйте: # - express-service # Uncomment if you need an Express Service.

  3. Сохраните изменения.

На хосте с Express Bot:

  1. Откройте файл haproxy.cfg.

    1. Раскомментируйте:
      • строку # aacl path-express-bot path_beg -i /am/bots/express
      • строку # use_backend Express_Bot_Backend if path-express-bot
      • секцию # Express_Bot_Backend
    2. В блоке FrontendHTTPs в строке с http-request reject unless добавьте: || path-express-bot.
  2. Откройте файл haproxy.docker-compose.yml и раскоментируйте: # - express-bot # Uncomment if you need an Express Bot.

  3. Сохраните изменения.

Настройка Express Service

  1. Откройте файл express-service/app-settings.json.
  2. В секции ExpressService укажите:
    • TrustedId — произвольный уникальный идентификатор
  3. В секции AuthenticationServer:
    • ServiceAccountName — имя сервисного пользователя (в формате PrincipalName) с правами глобального администратора Access Manager, от имени которого будут регистрироваться аутентификаторы
    • ServiceAccountPassword — пароль сервисного пользователя
    • TrustedId — произвольный уникальный идентификатор
  4. В секции Bot укажите:
    • URL — URL-адрес Express Bot (например, https://express-bot.com/am/bots/express)
    • TrustedId — произвольный уникальный идентификатор
  5. Сохраните изменения.

Настройка Docker Compose для Express Service:

  1. Откройте файл express-service.docker-compose.yml.
  2. Раскомментируйте строки:
    # ./ssl/client/core-client.pfx:/tmp/am_user/.dotnet/corefx/cryptography/x509stores/my/core-client.pfx:ro,Z
    # ./ssl/client/express-bot-client.pfx:/tmp/am_user/.dotnet/corefx/cryptography/x509stores/my/express-bot-client.pfx:ro,Z
  3. Сохраните изменения.

Настройка Express Bot

Примечание

Убедитесь, что системное время на хостах с Express Bot и CTS синхронизировано.

  1. Откройте файл express-bot/app-settings.json.
  2. В секции ExpressBot укажите:
    • TrustedId — тот же идентификатор, что указан в конфигурации Express Service в параметре Bot:TrustedId
  3. В секции ExpressService:
    • URL — URL-адрес Express Service (например, https://express-service.com/am/services/express)
    • TrustedId — тот же идентификатор, что указан в конфигурации Express Service в параметре ExpressService:TrustedId
  4. В секции Bots укажите:
    • BotId — идентификатор бота из CTS
    • CtsUrl — URL-адрес CTS
    • SecretKey — секретный ключ бота из CTS
  5. Сохраните изменения.

Настройка Docker Compose для Express Bot:

  1. Откройте файл express-bot.docker-compose.yml.
  2. Раскомментируйте строку:
    # ./ssl/client/express-client.pfx:/ssl/express-client.pfx:ro,Z
  3. Сохраните изменения.

Настройка в Management Console

Для настройки Express Provider в Management Console перейдите в раздел Конфигурация → Аутентификаторы и выберите аутентификатор Express.

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

В секции Основные настройки укажите следующие параметры:

  1. Доверенный ID Access Manager — укажите доверенный идентификатор из конфигурационного файла Express Service, параметр AuthenticationServer:TrustedId.
  2. Отпечаток клиентского сертификата — укажите отпечаток сертификата, полученный при выполнении скрипта generateExpressCert.sh.
  3. URL-адрес Express Service — укажите URL-адрес Express Service (например, https://express-service.com/am/services/express).
  4. Доверенный ID — укажите доверенный идентификатор из конфигурационного файла Express Service, параметр ExpressService:TrustedId.
  5. Отпечаток серверного сертификата — укажите отпечаток серверного сертификата, если требуется дополнительная проверка.

Права доступа

Чтобы выдать или отозвать права на использование аутентификатора:

  1. В секции Основные настройки:
    • В настройке Запретить использовать укажите, может ли пользователь использовать или регистрировать выбранный аутентификатор.
  2. В секции Доступные пользователю действия:
    • В настройке Регистрация новых аутентификаторов укажите, может ли пользователь регистрировать новые аутентификаторы.
    • В настройке Редактирование имеющихся аутентификаторов укажите, может ли пользователь изменять зарегистрированные аутентификаторы.
    • В настройке Удаление имеющихся аутентификаторов укажите, может ли пользователь удалять зарегистрированные аутентификаторы.

Блокировка аутентификатора

Чтобы настроить блокировку аутентификатора, в секции Настройки блокировки аутентификатора:

  1. Разрешите или заблокируйте использование Express в случае серии неудачных попыток аутентификации.
  2. В поле Количество попыток аутентификации до блокировки укажите, сколько раз пользователь может совершить неудачную аутентификацию до блокировки способа аутентификации.
  3. В поле Сброс счетчика блокировки укажите, сколько минут должно пройти после неудачной попытки аутентификации перед сбросом счетчика.
  4. В поле Таймаут до разблокировки способа входа укажите, через сколько минут заблокированный способ аутентификации станет снова доступным.

Регистрация аутентификатора в боте

Для использования Express пользователь должен зарегистрировать аутентификатор в боте:

  1. Откройте мессенджер и найдите бота по имени, которое вы указывали при создании в CTS.
  2. Нажмите кнопку Начать или отправьте команду /register.
  3. Поиск пользователя производится по email из каталога пользователей.
  4. Следуйте инструкциям бота для завершения регистрации.

После регистрации пользователь сможет подтверждать попытки входа через push-уведомления в мессенджере.

Проверка состояния сервера

Для проверки рабочего состояния сервера в контейнере Docker используйте метод Healthcheck:

Express Service
/am/services/express/healthcheck/isHealthy
Express Bot
/am/bots/express/healthcheck/isHealthy