Avanpost FAM/MFA+ : 4.6.4. Настройка веб-интерфейсов

Состав веб-интерфейсов

При работе Сервера функционирует следующий набор веб-интерфейсов:

  • веб-интерфейс аутентификации, включающий в себя:
    • набор методов аутентификации по протоколу OAuth 2.0/OpenID Connect;
    • набор методов аутентификации по протоколу SAML 2.0.
  • веб-интерфейс административной консоли;
  • веб-интерфейс личного кабинета.

Каждый веб-интерфейс слушает свой отдельный порт, который настраивается в конфигурационном файле.

Для публикации веб-интерфейсов и повышения управляемости сетевой конфигурацией интерфейсов рекомендуется использование промежуточного прокси-сервера, в качестве которого может выступать:

  • Nginx;
  • Nginx Plus;
  • Apache Httpd;
  • Microsoft IIS;
  • и т.д.

Варианты размещения

Веб-интерфейсы могут быть размещены в одном из следующих вариантов:

  1. Размещение на общем хосте.
  2. Размещение на отдельных хостах.

Размещение на общем хосте

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

В примере указаны следующие параметры:

ПараметрНазначение
external-idp.hostХост, на который отправляет запросы клиент (пользователь)
Nginx_IP external-idp.hostDNS-запись, указывающая на сервер с Nginx для хоста external-idp.host
Nginx_IPIP-адрес сервера Nginx

Server_IP

IP-адрес Сервера Avanpost

Вариант размещения веб-интерфейсов приведён на схеме:




  1. Указать базовый адрес (параметр base_url) в конфигурационном файле config.json (для версии FAM v1.8.7.346 нужно использовать config.toml), на который ожидается поступление запросов (соответствует external-idp.host на схеме).

    "base_url": "external-idp.host",
  2. В секции server конфигурационного файла указать host и port, на которые ожидается поступление запросов.

    "server": {
        "host": "localhost",
        "port": 4008
    },
  3. В секции adminconsole конфигурационного файла указать значение runAsService = true (остальные параметры могут быть оставлены или удалены при необходимости).

    "adminsoncole": {
        ...
        runAsService = true,
        ...
    },

    Примечание

    Параметр runAsService отвечает за публикацию административного интерфейса на отдельном сетевом интерфейсе (в случае с true – секция не читается, и публикация происходит по умолчанию на 4008 порту, при этом значении не требуется заполнение параметров base_url и port).

    При значении true – необходимо заполнить параметр в конфигурационном файле base url, указав DNS имя публикуемого интерфейса, а также указать порт – 4012.

    Пример секции для публикации на том же адресе, на котором размещён интерфейс аутентификации FAM:

    [adminconsole]
         baseUrl = 'http://idp.avanpost.local
         dir = './public/spa/admin'
         path = '/'
         runAsService = true
         host = 'localhost'
         port = 4012
         canCreateRadiusApp = true
         canCreateDesktopApp = true
         #dleTimeoutInMinutes = 50

    Пример секции для публикации административной консоли на отдельном адресе:

    [adminconsole]
         baseUrl = 'http://idp.avanpost.local
         dir = './public/spa/admin'
         path = '/'
         runAsService = false
         host = 'localhost'
         port = 4008
         canCreateRadiusApp = true
         canCreateDesktopApp = true
         #dleTimeoutInMinutes = 50

    На стороне nginx необходимо настроить проксирование на 4008 порт, указав server_name из корневого параметра base_url (idp.fam.local), и проксирование на 4012 порт, указав server_name (base_url из секции adminconsole) admin.fam.local.

    Внимание

    После изменения конфигурационного файла необходимо выполнить команду -init ( ./fam_linux_amd64 -init) для инициализации ЛК и административного интерфейса с новыми параметрами из конфигурационного файла

    В конфигурации виртуального хоста, размещённого на сервере Nginx, /etc/nginx/sites-available/idp.conf должно быть настроено проксирование всех запросов на хост к одному порту - localhost:4008:

    server {
        listen        80;
        server_name   external-idp.host;
        location / {
            proxy_pass         http://Server_IP:4008;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
  4. Перезапустить службу Сервера.

При корректной настройке будет функционировать следующая конфигурация веб-интерфейсов на общем хосте external-idp.host:

  • http://external-idp.host/ – веб-интерфейс административной консоли;

    Примечание

    В случае singlehost true административная консоль будет доступна по адресу http://external-adminidp.host

  • http://external-idp.host/lk – веб-интерфейс личного кабинета;
  • http://external-idp.host/oauth2/ – веб-интерфейс аутентификации (Сервер автоматически маршрутизирует пользователя на данный интерфейс, если он не аутентифицирован).

    Примечание

    Настройка HTTPS должна быть выполнена средствами Nginx по аналогии с настроенной конфигурацией в соответствии с документацией Nginx.

    Пример:

    server {
        listen 443 ssl;
        server_name external-idp.host;
        ssl_certificate /opt/idp/cert/cert.pem;
        ssl_certificate_key /opt/idp/cert/key.pem;
        location / {
            proxy_pass http://localhost:4008;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

Информация

В случае возникновения ошибки вида config: base URL is empty or has an incorrect format, попробуйте в /opt/idp/config.toml заменить base_url на baseUrl.

Размещение на отдельном хосте

Все URL запросов к веб-интерфейсов размещаются на различных хостах, далее Nginx (который может быть размещён как на отдельных машинах, так и в виде отдельных секций server на одной из машин) маршрутизирует все запросы на общий сетевой интерфейс Сервера. Выбор интерфейса, который будет показан пользователю (административная консоль или интерфейс аутентификации и личный кабинет) осуществляет Сервер.

В примере указаны следующие параметры:

ПараметрНазначение
admin-idp.hostХост, на котором опубликована административная консоль
auth-idp.hostХост, на котором опубликован интерфейс аутентификации
Nginx1_IP admin-idp.hostDNS-запись, указывающая на сервер с Nginx1 для хоста admin-idp.host
Nginx2_IP auth-idp.hostDNS-запись, указывающая на сервер с Nginx2 для хоста auth-idp.host
Nginx1_IPIP-адрес сервера Nginx №1, на котором опубликована административная консоль
Nginx2_IPIP-адрес сервера Nginx №2, на котором опубликован личный кабинет

Server_IP

IP-адрес Сервера Avanpost



Вариант размещения



  1. Указать базовый адрес (параметр base_url) в конфигурационном файле config.json (config.toml), на который ожидается поступление запросов (соответствует auth-idp.host на схеме):

    "base_url": "auth-idp.host",
  2. Для размещения интерфейса аутентификации в секции server конфигурационного файла config.toml указать host = localhost, значение port (по умолчанию 4008, но может быть изменён на произвольный свободный порт), на которые ожидается поступление запросов к интерфейсу аутентификации от прокси-сервера Nginx3:

    "server": {
        "host": "localhost",
        "port": 4008
    },


    В конфигурации виртуального хоста, размещённого на сервере Nginx3, /etc/nginx/sites-available/idp.conf должно быть настроено проксирование всех запросов на хост к одному порту - localhost:4008:

    server {
        listen        80;
        server_name   auth-idp.host;
        location / {
            proxy_pass       http://Server_IP:4008;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    3. В секции adminconsole конфигурационного файла config.toml указать base_url = localhost, host = localhost, а в port указать значение порта (по умолчанию 4014), на котором ожидать поступления запросов к административной консоли от прокси-сервера Nginx1.

    [adminconsole]
         baseUrl = 'http://idp.avanpost.local
         dir = './public/spa/admin'
         path = '/'
         runAsService = true
         host = 'localhost'
         port = 4012
         canCreateRadiusApp = true
         canCreateDesktopApp = true
         #dleTimeoutInMinutes = 50
    В случае настройки HTTPS также нужно настроить секцию cookies, также в config.toml в baseUrl везде должно быть прописано https:/. Пример настройки файла в разделе cookies:
    path = '/'
    secure = true                           
    http_only = false
    same_site = 'None'
    max_age = 2592000

    В конфигурации виртуального хоста, размещённого на сервере Nginx2, /etc/nginx/sites-available/idp.conf должно быть настроено проксирование всех запросов на хост к одному порту - localhost:4012.

    server {
        listen        80;
        server_name   lk-idp.host;
        location / {
            proxy_pass       http://Server_IP:4012;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }


    4. Перезапустить службу Сервера.

При корректной настройке будет функционировать следующая конфигурация веб-интерфейсов:

Настройка HTTPS должна быть выполнена средствами Nginx по аналогии с настроенной конфигурацией в соответствии с документацией Nginx.

Обсуждение