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

### Со стороны 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:

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

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

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

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

Пример:

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

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

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

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

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

### Техническая реализация новых вариантов отправки <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>

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

Параметры:

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

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

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

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

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

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://padocs.empldocs.app/dlya-razrabotchikov/tekhnicheskoe-opisanie-proekta/backend/dvukhfaktornaya-autentifikaciya-realizaciya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
