# Gate

## Описание

Настройки сервиса входа.

!!! note
     Обязательный элемент системы. API доступно только внутри инфраструктуры серверной части lexema8. 
     
     Раздел applications { gate { }} конфигурационного файла ./config/production.js

- **protocol** - используемый веб-протокол (по умолчанию `http`).
- **host** - имя хоста (по умолчанию `localhost`).
- **port** - порт для запуска (по умолчанию `3061`).
- **route** - используемый маршрут (по умолчанию `/api/v2.0/gate`).
- **timeout** - количество миллисекунд бездействия, после которого считается, что время ожидания истекло (по умолчанию `120`). В режиме продакшена может потребоваться дополнительно настроить таймаут для веб-сервера (nginx).
- **script** - путь к модулю, запускающему сервис (по умолчанию `'ecosoft-lexema8/gate'`).
- **allowUserToChangePassword** - разрешить/запретить пользователю изменять (восстанавливать) пароль (по умолчанию `true`). Для администратора компании настройка игнорируется (всегда доступно изменение пароля).
- **sessionLifeTime** - время жизни сессии в минутах (по умолчанию `10`).
- **refreshTokenLifeTime** - срок действия токена обновления в днях (по умолчанию `15`).
- **userTokenLifeTime** - устанавливает время действия токена восстановления пароля или кода входа при двухфакторной аутентификации в часах (по умолчанию `1`). Можно задавать дробные числа, чтобы указать минуты и/или секунды.
- **failedPasswordAttemptsInterval** - Время в секундах, через которое пользователь может повторить вход в приложение при неудачной попытке ввода пароля (по умолчанию `0` - без ограничений по времени).
- **attemptsLimitForConfirmCode** - количество попыток ввода токена восстановления пароля или кода входа при двухфакторной аутентификации (по умолчанию `0`). Если значение равно `0`, то количество попыток не ограничено.
- **timeLimitForResendingConfirmCode** - лимит времени (в секундах) для возможности повторной отправки токена восстановления пароля или кода входа при двухфакторной аутентификации (по умолчанию `0` - без ограничений по времени). Настройка влияет на доступность кнопки отправки кода. На сервере проверка не осуществляется.
- **userTokenProvider** - имя провайдера восстановления пароля (по умолчанию `'email'`). Доступные значения: email, phone, flashCall.
- **secret** - уникальный секретный ключ, на основе которого шифруется сессия.
- **validation** - настройки валидации пароля и логина пользователя.
  - **passwordRegularExpression** - регулярное выражения для проверки пароля (по умолчанию `/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}$/`).
  - **invalidPasswordMessage** - сообщение отображаемое пользователю при вводе невалидного пароля (по умолчанию `'Пароль должен содержать строчные и прописные буквы, а также цифры. Минимальная длина 8 символов'`).
  - **userNameRegularExpression** - регулярное выражения для проверки логина (по умолчанию `/^(?=.{8,20}$)[a-zA-Z0-9]+(?:[._][a-zA-Z0-9]+)*$/`).
  - **invalidUserNameMessage** - сообщение отображаемое пользователю при вводе невалидного логина (по умолчанию `'Логин должен содержать только латинские буквы или цифры. Минимальная длина 8 символов'`).
- **cookieName** - задает имя cookie для хранения идентификатора сессии (по умолчанию `'ara-session'`).
- **passwordExpiration** - задает срок действия пароля пользователя в днях, значение `0` отключает проверку (по умолчанию значение `0`).
- **externalRegistrationHost** - указывается адрес основного сайта, если текущий сайт используется для регистрации пользователей.
- **autoLogin** - настройки для автоматической авторизации клиента.
  - **userName** - login пользователя, под которым произойдет вход в приложение.
- **ldap** - раздел, содержащий настройки доменной авторизации (с проверкой логина/пароля на контроллере домена).
  - **url** - адрес контроллера домена. Пример: `ldap(s)://domain:port`.
  - **bindDN** - логин администратора домена. В случае пустой строки будет произведена попытка анонимного подключения.
  - **bindCredentials** - пароль администратора домена.
  - **searchBase** - описание базового имени, откуда начинается поиск пользователей. Пример: `'ou=users,dc=example,dc=org'`. Можно задавать в виде массива строк, если требуется выполнять поиск в разных каталогах. Пример: `['ou=users,dc=example1,dc=org', 'ou=users,dc=example2,dc=org']`.
  - **searchFilter** - описание фильтра LDAP для поиска пользователей.
  - **searchAttributes** - список атрибутов, возвращаемых контроллером домена при удачном поиске.
  - **updateUserAttributes** - включает/выключает автоматическое обновление атрибутов пользователя (которые получены из контроллера домена) в системной таблице (по умолчанию `true`).
  - **ldapSchemeDictionary** - словарь сопоставления атрибутов пользователя лексемы с полями, которые возвращаются контроллером домена после поиска пользователя. Используются для обновления данных в таблице пользователей, при получении списка пользователей из контроллера домена. Доступные атрибуты для сопоставления: firstName, lastName, middleName, email, phoneNumber. Пример: `ldapSchemeDictionary: { email: 'mail', phoneNumber: 'mobile' }`.
- **adfs** - раздел, содержащий настройки авторизации через портал ADFS:
  - **openid** - раздел, содержащий настройки для авторизации по схеме OpenID:
    - **configurationURL** - URL с OpenID конфигурацией федерации. (чаще всего выглядит так `https://fs.lex.lan/adfs/.well-known/openid-configuration`).
    - **clientID** - уникальный идентификатор клиентского приложения, зарегистрированного в федерации.
    - **callbackURL** - URL возврата приложения после авторизации на портале. Для приложения на 8.4 должно выглядеть так: `http(s)://[адрес сайта]/api/v2.0/gate/adfs/openid/callback`. (Вводится при регистрации приложения в федерации).
    - **strictSSL** - устанавливает необходимость валидации SSL сертификата при запросах к адресам федерации (по умолчанию `true`).
    - **userNameField** - поле, по которому будет проводиться аутентификация пользователя. Зависит от схемы, используемой в доменах федерации. (по умолчанию `upn`).
- **saml** - раздел, содержащий настройки для авторизации по схеме SAML:
  - **metadata** - URL для загрузки метаданных в формате XML. (чаще всего выглядит так `https://adfs2.lex.lan/FederationMetadata/2007-06/FederationMetadata.xml`).
  - **callbackUrl** - URL возврата приложения после авторизации на портале. Для приложения на 8.4 должно выглядеть так: `https://[адрес сайта]/api/v2.0/gate/adfs/saml/callback`. (Вводится при регистрации Relying Party Trusts в федерации).
  - **issuer** - идентификатор зарегистрированного Relying Party Trusts. (Вводится при регистрации Relying Party Trusts в федерации).
  - **entryPoint** - точка входа в портал. (Пример: `https://adfs2.lex.lan/adfs/ls`).
  - **upnName** - имя запрашиваемых данных из ADFS. (Пример: `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn`).
  - **cert** - сертификат подписи (signing) в формате X.509, декодированный в Base-64.
  - **disableRequestedAuthnContext** - флаг отключения проверки контекста авторизации. Позволяет пройти авторизацию из сети другого домена. Ошибка с текстом "SAML provider returned Responder error: NoAuthnContext" говорит о том, что контекст неверен или отсутствует и необходимо включить данную настройку при необходимости (по умолчанию `false`).
- **ssoAuthDC** - адрес контроллера домена. Пример: `ldap(s)://domain:port`.
- **enableChangePasswordOnFirstLogin** - включение необходимости смены пароля при первом входе пользователя после регистрации.
- **twoFactorProvider** - провайдер двухфакторной аутентификации. Доступные значения: `none`, `email`, `phone`, `flashCall`. В случае установки значения `none` считается выключенной. (по умолчанию `none`).
- **oauth2** - настройки oauth2-сервера.
- **multipleSessions** - включает/выключает поддержку множественных сессий для пользователя (по умолчанию `true`).
- **pingOne** - раздел, содержащий настройки авторизации через портал PingOne.
- **openid** - раздел, содержащий настройки для авторизации по схеме openid.
- **clientId** - уникальный идентификатор клиентского приложения.
- **clientSecret** - `client_secret` клиентского приложения.
- **scope** - список передаваемых scope (пример: `'openid profile email'`).
- **callbackUrl** - url возврата приложения после авторизации на портале. Для приложения на 8.4 должно выглядеть так: `http(s)://[адрес сайта]/api/v2.0/gate/pingone/openid/callback`.
- **authorizationUrl** - адрес, на который перенаправляется пользователь для ввода логина и пароля.
- **jwksEndPoint** - адрес JWKS endpoint.
- **tokenEndpoint** - адрес token endpoint.
- **prompt** - указывает, будет ли сервер авторизации запрашивать у конечного пользователя повторную аутентификацию (по умолчанию `none`). Доступные значения: `none`, `login`.
