# Двухфакторная аутентификация (реализация)

### Со стороны API <a href="#scroll-bookmark-1" id="scroll-bookmark-1"></a>

Детальное описание методов есть в Postman в папке "Пользователи"

### В рамках двухфакторной аутентификации: <a href="#scroll-bookmark-3" id="scroll-bookmark-3"></a>

Если для пользователя требуется двухфакторная аутентификация, с использованием стандартного токена **до прохождения 2FA** доступны лишь следующие методы:

1. /wa\_users/restorePass
2. /wa\_users/setToken
3. /wa\_users/2FA/init/
4. /wa\_users/2FA/validate/
5. /wa\_users/logout

Пример сообщения, что не пройдена 2FA:

{\
&#x20;   "success": false,\
&#x20;   "errorCode": "403",\
&#x20;   "errorMsg": "Двухфакторная аутентификация не пройдена"\
}

После успешного прохождения 2FA с помощью стандартного токена можно выполнять остальные методы API.

#### Изменён метод /wa\_users/login <a href="#scroll-bookmark-4" id="scroll-bookmark-4"></a>

Если для пользователя используется двухфакторная аутентификация, стандартная структура с токеном и его временем жизни будет содержать новое поле - is2FAPassed&#x20;

Пример:

{\
&#x20;   "token": "7218608a-4089-45e8-96c8-b1ae26f4cdc8",\
&#x20;   "expire\_date": "2022-03-29T01:25:46",\
&#x20;   "is2FAPassed": false\
}

#### Добавлен метод /wa\_users/2FA/init/ <a href="#scroll-bookmark-5" id="scroll-bookmark-5"></a>

Инициирует отправку кода подтверждения в сторону пользователя с использованием настроенного на стороне бэка метода.&#x20;

#### Добавлен метод /wa\_users/2FA/validate/ <a href="#scroll-bookmark-6" id="scroll-bookmark-6"></a>

Выполняет проверку, что введённый пользователем код соответствует ранее отправленному.&#x20;

### Техническая реализация новых вариантов отправки <a href="#scroll-bookmark-7" id="scroll-bookmark-7"></a>

Чтобы реализовать новый вариант, нужно выполнить следующие шаги:

### Создать новый общий модуль с произвольным названием <a href="#scroll-bookmark-8" id="scroll-bookmark-8"></a>

Созданный общий модуль должен реализовывать следующие методы:

#### ОтправитьКод <a href="#scroll-bookmark-9" id="scroll-bookmark-9"></a>

Реализует отправку кода и его сохранение в ИБ.

Параметры:

&#x20; ФизическоеЛицо - СправочникСсылка.ФизическиеЛица  - физ. лицо, которому будет отправлен код<br>

Должен возвращать параметры в соответствии со структурой лксДвухфакторнаяАутентификацияОбщий.КодОтправленПараметры&#x20;

#### ВведенКорректныйКод <a href="#scroll-bookmark-10" id="scroll-bookmark-10"></a>

Проверяет равен ли код ранее отправленному

Параметры:\
&#x20;ФизическоеЛицо - СправочникСсылка.ФизическиеЛица  - физ. лицо, которое пытается пройти аутентификацию\
&#x20;ВведенныйКод - Число  - 6 цифр TOTP-кода, введённого пользователем

Должен возвращать Булево в зависимости от результата проверки или Неопределено , если 2FA не начата.&#x20;

Для служебных действий над кодом и статусом прохождения 2FA следует использовать методы области СлужебныйПрограммныйИнтерфейс общего модуля лксДвухфакторнаяАутентификацияОбщий .

### Добавить созданный общий модуль в перечисление лксВариантыДвухфакторнойАутентификации <a href="#scroll-bookmark-11" id="scroll-bookmark-11"></a>

Новое значение перечисления должно отвечать следующий требованиям:

1. Имя значения - то, как общий модуль назван в конфигурации.
2. Синоним - осмысленное название варианта 2FA. Будет отобраться в пользовательском интерфейсе.&#x20;
