Подключение авторизации через ЕСИА
Обзор
Связанные статьи:
Методические рекомендации по использованию ЕСИА 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-провайдера. При необходимости алгоритм связывания можно кастомизировать, назначив для него сценарий, а не автоматический режим связывания. Подробно по каждому полю сущности в описании коллекции.
Инструкция по использованию
-
В браузере открыть окно авторизации.
-
Нажать "Вход через ESIA (ТЕСТ)"
-
Ввести в открывшеесея окно ЕСИА почту и пароль от тестовой учетной записи (создать в ТЕСИА свою, либо воспользоваться из приложенной в архиве инструации готовыми тестовыми записями).
-
Разрешить предоставление системе запрошенных сведений.
Далее проникаем в корневое веб-приложение системы.
Если пользователь подключается в первый раз, то для него создается учетная запись в системе и происходит связывание. Связывание производится на основании специальным образом сформированного логина, либо емайла.
Дефолтная настройка пользователя задается в свойствах домена (settings.self_register_template) и применяется при создании учетной записи. Например, там можно определить доступные пользователю роли, приложение по умолчанию.
Если пользователь подключается повторно, то связанная учетная запись обнаруживается и корректируется на основании актуальных данных.