Оглавление
- Настройка Haproxy
- Настройка Messages Proxy
- Демонстрация работы сценария
Предварительные требования
Настройка Haproxy
Полноценный конфигурационный файл Haproxy для балансировки только компонента Messages Proxy прикреплен во вложении.
Frontend:
frontend messages_proxy
log 127.0.0.1 local0
mode http
bind *:443 ssl crt indeedbal.pem crt-ignore-err all verify optional ca-file domain_cert.cer ciphers ALL:@SECLEVEL=1
option forwardfor
http-request redirect scheme https unless { ssl_fc }
http-request add-header X-IndeedAM-ClientCert %{+Q}[ssl_c_der,base64]
default_backend backend_mp_servers_ssl
Здесь требуется наличие доменного сертификата в формате .pem (в примере indeedbal.pem), а также проверки запросов корневым доменным сертификатом в формате .cer (в примере domain_cert.cer). При обращении Core к Messages Proxy, передается клиентский сертификат (который создается на этапе развертывания MP). Балансировщику требуется доменный корневой сертификат, чтобы организовать доверие к внешнему подключения и передать его во внутреннее.
Backend:
backend backend_mp_servers_ssl #Балансировка Messages Proxy
mode http
log 127.0.0.1 local0
balance roundrobin
option prefer-last-server
option redispatch
option forwardfor
option httpchk
http-check send meth POST uri /am/proxies/messages/health-check ver HTTP/1.1 hdr Host %[srv_name] hdr Content-Type application/json body "{}"
http-check expect status 204
option http-keep-alive
default-server inter 10s downinter 5s fall 5 rise 2
cookie IndeedIdProxy insert indirect nocache secure
server MessagesProxy1 indeedam1.indeed-test.com:443 check inter 5000ms cookie MessagesProxy1 ssl verify required ca-file domain_cert.cer ciphers ALL:@SECLEVEL=1
server MessagesProxy2 indeedam2.indeed-test.com:443 check inter 5000ms cookie MessagesProxy2 ssl verify required ca-file domain_cert.cer ciphers ALL:@SECLEVEL=1
Для корректной проверки Healthcheck Messages Proxy, требуется выполнять POST запрос, с обязательным наличием в Header имени хоста. Для этого используется динамическая переменная (%[srv_name]), чтобы подставлять имя хоста прямо из перечисленных северов MP в бекенде. (в примере это indeedam1.indeed-test.com и indeedam2.indeed-test.com). Для того чтобы сервер считался активным, требуется получить в ответ 204 код. Наличие ver HTTP/1.1 обязательно, иначе будет использоваться HTTP версии 1.0, который не поддерживает динамические переменные. Наличие Header Content-Type application/json body "{}" тоже обязательно.

Настройка Messages Proxy
В настройках Messages Proxy, которые расположены в реестре, в ServerUrl требуется указать адрес балансировщика (в примере это indeedbal.indeed-test.com). В параметре ServerCertificateThumbprint требуется указать отпечаток сертификата балансировщика, который используется во Frontend (в примере indeedbal.pem).


В параметр ClientCertificateThumbprint записывается отпечаток сертификата, который создается на данном этапе. Этот же отпечаток необходимо указывать в конфигурационом файле на всех нодах Messages Proxy. (C:\inetpub\wwwroot\am\proxies\messages\app-settings.Production.json) Также, в этом конфигурационном файле требуется указать Header: "X-IndeedAM-ClientCert".
Конфигурационный файл будет идентичен на всех нодах Messages Proxy, за исключением пути до исполняемого скрипта, если он будет отличаться.

Пример:
"Authentication": {
"Certificate": {
"Thumbprint": "e999402c324b713c8d966757a93770ade115a1bf",
"ForwardingHeader": "X-IndeedAM-ClientCert"
}
Демонстрация работы Messages Proxy с использованием общего имени
В качестве тестового сценария используется аутентификация в User Console при помощи компонента IDP, в котором настроен провайдер SMS OTP + Messages proxy. В качестве скрипта, используется отправка с тестовую утилиту, которая принимает http запросы.

Успешная аутентификация в User Console

Событие об отправке СМС и успешном входе в UC.

|