# Настройка авторизации пользователей ## Общие сведения Настройка авторизации пользователей производится с помощью конфигурационного файла *./config/local.js* в разделе **gate**. Следует отметить, что этот файл должен содержаться в списке исключений системы контроля версий (занесён в файл .gitignore). Также для этих целей можно использовать файл *./config/production.js*, однако следует учитывать, что настройки файла local.js более приоритетные, чем у production.js. Использовать файл *./config/default.js* для настройки авторизации не рекомендуется по причине необходимости прописать в настройках конфиденциальные данные. ## Стандартная авторизация Настройки веб-сервисов производятся в разделе **applications**, настройки авторизации пользователей - в подразделе **gate**. Более подробно про настройку раздела **gate** можно прочитать в [перечне настроек gate](./../../../../service/gate/configuration.md). - **_sessionLifeTime_** - время жизни сессии в минутах (по умолчанию `10`). - **_ldap_** - раздел, содержащий настройки доменной авторизации (с проверкой логина/пароля на контроллере домена) * **_url_** - адрес контроллера домена. Пример: `ldap(s)://domain:port`. * **_bindDN_** - логин администратора домена. В случае пустой строки будет произведена попытка анонимного подключения. * **_bindCredentials_** - пароль администратора домена. * **_searchBase_** - описание базового имени откуда начинается поиск пользователей. Пример: `ou=users,dc=example,dc=org` * **_searchFilter_** - описание фильтра ldap для поиска пользователей. * **_searchAttributes_** - список атрибутов, возвращаемых контроллером домена при удачном поиске. - **_validation_** - настройки валидации пароля и логина пользователя. * **_passwordRegularExpression_** - регулярное выражение для проверки пароля (по умолчанию `/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}$/`). Пример: ```js applications: { gate: { sessionLifeTime: 1800, ldap: { url: 'ldap://domain.local:port', bindDN: 'CN=User,CN=Users,DC=domain,DC=local', bindCredentials: 'password', searchBase: 'OU=Users,OU=Organization,DC=domain,DC=local', searchFilter: '(&(objectclass=person)(sAMAccountName={{username}}))', searchAttributes: ['displayName', 'sAMAccountName'] }, validation: { passwordRegularExpression: /^[a-zA-Z0-9]{3,}$/ }, // ... }, // ... } ``` ## Двухфакторная авторизация - **_twoFactorProvider_** - провайдер двухфакторной аутентификации. Доступные значения: *none*, *email*, *phone* (по умолчанию `'none'`). В случае установки значения none считается выключенной. - **_userTokenLifeTime_** - устанавливает время действия токена восстановления пароля или кода входа при двухфакторной аутентификации в часах (по умолчанию 1). Можно задавать дробные числа, чтобы указать минуты и/или секунды. - **_attemptsLimitForConfirmCode_** - количество попыток ввода токена восстановления пароля или кода входа при двухфакторной аутентификации (по умолчанию 0). Если значение равно 0, то количество попыток не ограничено. - **_timeLimitForResendingConfirmCode_** - лимит времени (в секундах) для возможности повторной отправки токена восстановления пароля или кода входа при двухфакторной аутентификации (по умолчанию 0 - без ограничений по времени). Настройка влияет на доступность кнопки отправки кода. На сервере проверка не осуществляется. Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**. Чтобы работала отправка СМС, необходимо произвести настройки в разделе **applications.post.sms**. Пример: ``` js applications: { gate: { sessionLifeTime: 1800, ldap: { // ... }, validation: { // ... }, twoFactorProvider: 'phone', userTokenLifeTime: 0.1, attemptsLimitForConfirmCode: 3, timeLimitForResendingConfirmCode: 30 }, // ... post: { defaultEmailId: 'default', emails: { default: { host: 'smtp.gmail.com', port: 587, secure: false, user: 'lexemaecm@gmail.com', pass: 'password', userName: 'Lexema' } }, sms:{ provider: 'mts', token: 'abc01234-012a-0abc-0895-abc012345678', sender:'LEXEMAECM' }, // ... } ``` ## Доменная авторизация Обновление данных происходит после каждой авторизации пользователя в системе. для обновления необходимо настроить следующие разделы конфигурации: - **_applications.gate.ldap.searchAttributes_** - параметр, отвечающий за возвращаемые наборы данных пользователей при авторизации. - **_applications.gate.ldapSchemeDictionary_** - словарь сопоставления атрибутов пользователя системы и пользователя домена. **_ldapSchemeDictionary_** - словарь сопоставления атрибутов, возвращаемых после поиска пользователя в контроллере домена, и полей, доступных для обновления в таблице пользователей. Ключ словаря - параметр пользователя системы, значение ключа - параметр пользователя домена. Значения должны быть описаны в параметре ldap.searchAttributes. Доступные значения для обновления в таблице: *firstName*, *lastName*, *middleName*, *email*, *phoneNumber*. Пример: ```js applications: { gate: { sessionLifeTime: 1800, ldap: { url: 'ldap://domain:port', bindDN: 'CN=User,CN=Users,DC=domain', bindCredentials: 'password', searchBase: 'OU=Users,OU=Organization,DC=domain', searchFilter: '(&(objectclass=person)(sAMAccountName={{username}}))', searchAttributes: ['sn', 'givenName', 'mobile', 'middleName', 'mail', 'sAMAccountName'] }, ldapSchemeDictionary: { firstName: 'givenName', lastName: 'sn', middleName: 'middleName', email: 'mail', phoneNumber: 'mobile' } }, // ... } ``` ## Смена пароля при первом входе в систему - Чтобы новым пользователям в системе предлагалось сменить пароль при первом входе, необходимо включить настройку **_enableChangePasswordOnFirstLogin_**. - **_userTokenProvider_** - имя провайдера восстановления пароля (по умолчанию 'Email'). Доступные значения: *Email*, *Phone*. От этой настройки зависит, придёт код для смены пароля на почту или в СМС. Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**. Чтобы работала отправка СМС, необходимо произвести настройки в разделе **applications.post.sms**. Пример: ```js applications: { gate: { sessionLifeTime: 1800, ldap: { // ... }, validation: { // ... }, enableChangePasswordOnFirstLogin : true, userTokenProvider: 'Email' }, // ... } ``` ## Ограничение срока действия паролей пользователей - Настройка **_passwordExpiration_** задает срок действия пароля пользователя в днях, значение 0 отключает проверку (по умолчанию значение 0). По истечении срока действия пароля, при попытке входа в систему пользователю будем предложено сменить пароль. Письмо с одноразовым кодом для смены пароля придёт на почту пользователя. - **_userTokenProvider_** - имя провайдера восстановления пароля (по умолчанию 'Email'). Доступные значения: *Email*, *Phone*. От этой настройки зависит, придёт код для смены пароля на почту или в СМС. Чтобы отправка писем на почту работала, необходимо подключить почтовый ящик в разделе **applications.post.emails**. Чтобы работала отправка СМС, необходимо произвести настройки в разделе **applications.post.sms**.