# Политика паролей ## Общее описание За включение парольной политики на типе объекта отвечает атрибут `bPasswordSettingsInOT` в классе `Btk_Setting` (по умолчанию — `false`). - Если атрибут установлен (`true`), используется политика из класса `Btk_UserPasswordSetting`. - Если атрибут не установлен или равен `false`, политика определяется параметрами класса `Btk_User`. --- ### Атрибуты, определяющие требования к паролю - **`bPassSpecSymb`** — необходимость наличия хотя бы одного специального символа. По умолчанию — `0` (не требуется). Допустимые символы: `!@#$%^&*()-+\?/.,№;:` - **`bPassLetterDigit`** — обязательное наличие как букв, так и цифр. По умолчанию — `0`. - **`bPassUpperLowerLetter`** — необходимость использования как строчных, так и прописных букв. По умолчанию — `0`. - **`nPassMinSymbCnt`** — минимально допустимое количество символов в пароле. Значение по умолчанию отсутствует (ограничение не применяется). --- ### Атрибуты, определяющие политику управления паролем - **`nNonRepeatPassAmount`** — количество последних паролей, которые нельзя повторно использовать. По умолчанию отсутствует (повтор разрешён). - **`nDayInactivityCntForUserBlocking`** — число дней без активности, после которого пользователь будет заблокирован. Значение по умолчанию — `180`. - **`nMinLifitime`** — минимальное количество дней между сменами пароля. Запрещает слишком частую смену. По умолчанию отсутствует. - **`jTempBlockingForUnsuccessfulLogin`** — параметры временной блокировки при неудачных попытках входа. JSON-объект с полями: - `nNumberOfAttempts` — допустимое число ошибочных попыток входа; - `nBlockingTimeMin` — время блокировки (в минутах) при превышении лимита. - **`nValidityPeriod`** — срок действия постоянного пароля (в днях). - **`nValidityPeriodTemp`** — срок действия временного пароля (в днях). - **`sDaysForNotifyChangePass`** — количество дней до окончания срока действия пароля, за которое будет отправлено уведомление о необходимости его смены. Если `bPasswordSettingsInOT = false`, то применяются следующие параметры из `Btk_User`: - `bPassSpecSymb`, `bPassLetterDigit`, `nPassMinSymbCnt` — действуют аналогично вышеописанным. --- ## Валидация политики ### 1. Проверка требований к сложности пароля Происходит при смене пароля в методе `Btk_ChangePasswordAvi.Card.beforeCloseForm`. Используются следующие методы: - **`Btk_UserApi.validateUserPassword`** — проверяет соблюдение минимального срока жизни пароля (`nMinLifitime`). - **`Btk_UserApi.validateTempPassword`** — проверяет, не истёк ли срок действия текущего пароля (`nValidityPeriod` или `nValidityPeriodTemp`). - **`Btk_UserApi.checkPass`** — производит детальную проверку структуры нового пароля по заданным параметрам (`bPassSpecSymb`, `bPassLetterDigit`, `bPassUpperLowerLetter`, `nPassMinSymbCnt`). ### 2. Проверка уникальности пароля Метод `Btk_UserApi.setsPass` вызывает `Btk_UserPassHistoryApi.register`, который сравнивает новый пароль с предыдущими. - Если `nNonRepeatPassAmount` > 0, установка пароля, совпадающего с одним из последних, запрещается. - Например, при значении `2` система не позволит использовать пароль, совпадающий с любым из двух предыдущих. ### 3. Обработка устаревших паролей и уведомлений Методы: - **`processUpdatingOutdatedPass`** — используется в составе job-процесса. При истечении срока действия пароля: - устанавливает `Btk_User.bChangePasswd = true`; - автоматически генерирует новый временный пароль. - **`emailNotifyUserForNeedChangePassword`** — отправляет уведомление пользователю, если до окончания срока действия пароля осталось количество дней, заданное в `sDaysForNotifyChangePass`. ### 4. Временная блокировка при неудачных попытках входа Метод `validateBlockingUserResult` контролирует количество подряд неудачных попыток входа: - При превышении лимита `jTempBlockingForUnsuccessfulLogin.nNumberOfAttempts` пользователь временно блокируется. - Длительность блокировки задается параметром `jTempBlockingForUnsuccessfulLogin.nBlockingTimeMin`.