Подключение авторизации через ЕСИА

Обзор

Связанные статьи:

Методические рекомендации по использованию ЕСИА https://digital.gov.ru/ru/documents/6186/

Регламент информационного взаимодействия Участников с Оператором ЕСИА и Оператором эксплуатации инфраструктуры электронного правительства https://digital.gov.ru/ru/documents/4244

При регистрации информационной системы в МинСвязи ей присваивается мнемоника (аналог OAuth client_id). Далее необходимо создать сертификат ГОСТ3410 и прикрепить его к заявке: сначала на подключение к тестовой среде ЕСИА, а затем после успешных испытаний к продуктовой среде ЕСИА. К заявке прикладывается сертификат, а также указывается требуемый системе скоуп данных. Например: 'fullname, mobile, birthdate, id_doc, vehicles, addresses, email'.

Заявки на подключение отправляются на электронный адрес: sd@sc.digital.gov.ru

С момента подтверждения подключения к тестовой среде ЕСИА можно производить настройку платформы.

Подготовка сервера

Протокол интеграции с ЕСИА имеет отличие от стандартного OAuth 2.0. Поле 'client_secret' содержит не константную строку, а открепленную квалифицированную цифровую подпись параметров в URL.

Таким образом при интеграции с ЕСИА между серверами производится обмен данными с открепленной квалифицированной цифровой подписью, использующей сертификаты ГОСТ-3410, 3411. Для работ с этими сертификатами на серверы, где исполняются микросервисы вебсервера требуется установка специализированного окружения.

В докер-контейнере с установленной платформой и debian 10 следует выполнить следующие команды:

# установить пакеты
apt-get install g++ gcc make

# скачать и распаковать архив openssl-1.1.1p
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz
tar -zxvf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p

# собрать и установить openssl
./config --prefix=/usr/ssl --openssldir=/usr/ssl
make all
make install
cd ..

# заменить симлинк
rm /usr/bin/openssl
ln -s /usr/ssl/bin/openssl /usr/bin/openssl
echo "/usr/ssl/lib" >> /etc/ld.so.conf.d/ssl.conf
ldconfig

# проверить установленную версию
openssl version -v

# установить пакеты
apt-get install git libssl-dev

# скачать и распаковать архив cmake-3.23.2
wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz
tar -zxvf cmake-3.23.2.tar.gz
cd cmake-3.23.2

# собрать и установить cmake
./bootstrap --prefix=/usr
make
make install
cd ..

# проверить установленную версию
cmake --version

# клонировать репозиторий gost-engine для openssl
git clone https://github.com/gost-engine/engine.git gost-engine
cd gost-engine/
git checkout openssl_1_1_1

# собрать и установить движки
mkdir -p /usr/lib/ssl/engines-3
cmake -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=/usr/ssl -DOPENSSL_LIBRARIES=/usr/ssl/lib -DOPENSSL_ENGINES_DIR=/usr/ssl/lib/engines-3
cmake --build . --config Release
cmake --build . --target install --config Release

# дополнить файл openssl.cnf
sed -i "s|^\[ new_oids \]|openssl_conf = openssl_def\n\n[ new_oids ]|g" /usr/ssl/openssl.cnf

echo "
# GOST section
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/ssl/lib/engines-3/gost.so
GOST_PK_FORMAT = LEGACY_PK_WRAP" >> /usr/ssl/openssl.cnf

Подготовка открепленной квалифицированной цифровой подписи ведется следующей командой.

  • Подписываемые данные находятся в файле data.txt

  • Сертификат ГОСТ3410 в PEM формате находится в файле cert.pem

  • Результат размещается в файл data.txt.sign

openssl smime -engine gost -outform PEM -in data.txt -out data.txt.sign -sign -signer cert.pem -inkey cert.pem -binary -noattr

Инструкция по настройке

Для подключения к тестовому контуру ЕСИА необходимо создать провайдер авторизации с диалектом 'tesia'.

Для подключения к продуктовому контуру ЕСИА необходимо создать провайдер авторизации с диалектом 'esia'.

Пример здесь, необходимо изменить значение свойства 'dialect'.

С использованием тестовых учетных записей, предоставленных при подтверждении заявки, или созданных специально в среде ТЕСИА, производится проверка.

В учетной записи пользователя имеется поле 'opts.info'. Это объект, содержащий все предоставленными из ЕСИА сведениями о пользователе (формат построения объекта задается в свойствах соответствующего провайдера в поле 'query_info').

Алгоритм интеграции прошит в системе. Параметры для этого алгоритма задаются в сущности OAuth-провайдера. При необходимости алгоритм связывания можно кастомизировать, назначив для него сценарий, а не автоматический режим связывания. Подробно по каждому полю сущности в описании коллекции.

Инструкция по использованию

  1. В браузере открыть окно авторизации.

  2. Нажать "Вход через ESIA (ТЕСТ)"

  3. Ввести в открывшеесея окно ЕСИА почту и пароль от тестовой учетной записи (создать в ТЕСИА свою, либо воспользоваться из приложенной в архиве инструации готовыми тестовыми записями).

  4. Разрешить предоставление системе запрошенных сведений.

Далее проникаем в корневое веб-приложение системы.

Если пользователь подключается в первый раз, то для него создается учетная запись в системе и происходит связывание. Связывание производится на основании специальным образом сформированного логина, либо емайла.

Дефолтная настройка пользователя задается в свойствах домена (settings.self_register_template) и применяется при создании учетной записи. Например, там можно определить доступные пользователю роли, приложение по умолчанию.

Если пользователь подключается повторно, то связанная учетная запись обнаруживается и корректируется на основании актуальных данных.