Продукт Рутокен 2FA Демо предназначен для демонстрации применения и функциональных возможностей устройств Рутокен MFA, Рутокен OTP и Рутокен ЭЦП 3.0 в сценариях двухэтапной и беспарольной аутентификации.
Для демонстрации возможностей аутентификации с помощью Рутокен MFA и Рутокен ОТР используются соответственно технологии FIDO2 (CTAP2 + WebAuthn), OATH TOTP (Time-based One-Time Password Algorithm, RFC 6238). Для демонстрации возможностей аутентификации с помощью Рутокен ЭЦП 3.0 используются два компонента:
- Рутокен Плагин - компонент браузера, позволяющий управлять ключами и сертификатами на токене и применять Рутокен ЭЦП 3.0 в инфраструктуре PKI, построенной на основе X509-сертификатов в соответствии со стандартами PKCS#7 и PKCS#10;
- Модуль сертификации - компонент, выполняющий функцию по выпуску пользовательских сертификатов на сервере аутентификации.
В системе реализована следующая функциональность:
- регистрация пользователей;
- традиционная (однофакторная) аутентификация (логин и пароль);
- личный кабинет пользователя;
- добавление/удаление второго фактора аутентификации;
- двухэтапная и беспарольная аутентификация.
Веб-сервер | .NET SDK 6 |
Среда исполнения JS | Node.js v18.0.0 |
Фронтенд | React |
База данных | PostgreSQL |
Библиотеки | Passwordless - FIDO2 for .NET OTP .NET QrCoder Bouncy Castle Cryptography Library For .NET |
В продукте реализована двухфакторная аутентификация с использованием механизма электронной цифровой подписи.
Добавление второго фактора аутентификации
Аутентификация Пользователя
Для выпуска сертификатов пользователей требуется развернуть Модуль сертификации.
Для проверки электронной подписи применяется библиотека Bouncy Castle Cryptography Library For .NET.
Взаимодействие с токеном в браузере обеспечивается следующими библиотеками:
Генерация ключевой пары выполняется по алгоритму ГОСТ Р 34.10-2012 256-бит.
Взаимодействие с модулем сертификации осуществляется через API.
Перед запуском необходимо указать соответствующие URL и API-ключ в разделе CAConfig
файла RutokenTotpFido2Demo/appsettings.json
.
В продукте реализованы следующие компоненты архитектуры FIDO2:
- Client-Side JS, Server-Side App & User Store;
- FIDO2 Server реализован с помощью библиотеки Passwordless - FIDO2 for .NET;
- Продукт позволяет осуществлять аутентификацию в режиме Passwordless, для этого устройство должно поддерживать Режим верификации пользователя;
- PasswordLess аутентификация включается на сервере путем установки параметров.
var authenticatorSelection = new AuthenticatorSelection { RequireResidentKey = true, UserVerification = UserVerificationRequirement.Required };
В продукте реализована двухфакторная аутентификация по протоколу TOTP (Time-based One-time Password) с помощью библиотеки OTP .NET.
Сервер позволяет вводить seed (секретный) ключ в форматах Base32 или HEX.
Для сборки и запуска веб-сервиса необходим установленный в системе .NET SDK 6.
Для сборки фронтенд части системы необходимо установить Node.js v18.0.0. Для переключения между версиями можно использовать NVM (Node Version Manager).
nvm install 18.0.0 # Если не была установлена версия ранее
nvm use 18.0.0 # Если на текущий момент использовалась другая версия Node.js, но необходимая была установлена ранее
В качестве хранилища данных сервис использует СУБД PostgreSQL.
ConnectionString
к базе данных укажите в файле RutokenTotpFido2Demo/appsettings.json
.
Сборка запускается следующей командой — dotnet publish -c Release
.
Для запуска сервиса, необходимо в директории проекта выполнить следующие команды.
Linux
cd bin/Release/net6.0/publish
dotnet RutokenTotpFido2Demo.dll
Windows
cd bin\Release\net6.0\publish
dotnet RutokenTotpFido2Demo.dll
Перейдите по адресу https://localhost:5000 (адрес указан в консоли после запуска сервиса) для применения и функциональных возможностей устройств Рутокен MFA, Рутокен OTP и Рутокен ЭЦП 3.0 в сценариях двухэтапной и беспарольной аутентификации.
-
Для запуска в докер контейнере необходимо сконфигурировать
.env
файл в корневой директории проекта. Описание параметров представлено ниже в таблице.Параметр Описание APP_CONTAINER_NAME Имя контейнера приложения DESTINATION_FOLDER Директория контейнера APP_OUT_PORT Внешний порт приложения DB_CONTAINER_NAME Имя контейнера БД DB_NAME Наименование БД DB_PORT Внешний порт БД DB_PSWD Пароль пользователя БД DB_USER Имя пользователя БД DB_FOLDER Директория контейнера БД Параметры
ConnectionString
в файлеRutokenTotpFido2Demo/appsettings.json
должны совпадать с параметрами, указанными в файле.env
.{ "ConnectionStrings": { "Default": "Host=DB_CONTAINER_NAME;Port=DB_PORT;Database=DB_NAME;Username=DB_USER;Password=DB_PSWD" }, }
-
Создать директории для контейнера базы данных и приложения.
destinationFolder='/Users/my-user/ru-demo' mkdir -p ${destinationFolder}/app mkdir -p ${destinationFolder}/db
-
Перейти в директорию проекта "Рутокен 2FA Демо" (укажите вашу директорию).
сd /Users/my-user/myproject/
-
Скопировать сборки и файлы docker.
scp RutokenTotpFido2Demo/docker-compose.yml ${destinationFolder} scp RutokenTotpFido2Demo/.env ${destinationFolder} scp -r RutokenTotpFido2Demo/bin/Release/net6.0/publish/* ${destinationFolder}/app
-
Запустить контейнеры.
docker compose -f ${destinationFolder}/docker-compose.yml up
-
После запуска контейнера перейти
http://localhost:APP_OUT_PORT
, где APP_OUT_PORT — параметр заданный в файле.env
на первом шаге.