в 3:11, , рубрики: oauth2, open source, OpenConnect, php, php5, php7, госуслуги, есиа, финтех

Представляем yet another PHP-пакет интеграции с ЕСИА — ekapusta/oauth2-esia. Реализован как адаптер к популярному league/oauth2-client.
- Почему этот пакет?
- Создание файла scope. txt
- Регистрация системы
- Настройка модуля аутентификации в ИИС МФЦ
- Проверка работоспособности
- Сравнение вариантов подключения к ЕСИА
- В 2017 году Минкомсвязь России внесла уточнение в регламент подключения к ЕСИА
- Покажите код!
- Получаем данные пользователя
- Как обновить токен?
- Часто задаваемые вопросы (FAQ) по ЕСИА
Почему этот пакет?

Данная инструкция позволит Вам сформировать сертификат для ЕСИА и настроить взаимодействие ИИС МФЦ с ЕСИА с использованием модели OAuth 2.0 / OpenID Connect.
Аутентификация пользователей с использованием OpenID Connect 1.0 в производится в соответствии с Методическими рекомендациями по использованию Единой системы идентификации и аутентификации
Создание файла scope. txt
Область доступа определяет перечень атрибутов, возвращаемых системой авторизации при успешном выполнении пользователем входа в ЕСИА.
содержимое файла scope.txt:
fullname birthdate gender email mobile id_doc snils inn birthplace contacts
Регистрация системы
Зарегистрируйте ИИС (или измените регистрацию) на
использование модели OAuth 2.0 / OpenID Connect
Внесите изменения на технологическом портале в соответствии с «Руководство пользователя Технологического портала».
Настройка модуля аутентификации в ИИС МФЦ
ЕСИА требует подписывать запросы ГОСТ сертификатом. Для этого необходимо добавить ключ подписи в сигнер 2 и указать alias этой подписи в поле «Alias подписи в сигнер 2».

Проверка работоспособности


После успешного ввода идентификационных данных Вам предложат передать данные на портал МФЦ

После перенаправления на Ваш сайт МФЦ будет произведена проверка в ИИС МФЦ пользователя. Если такой пользователь уже был (проверяется по СНИЛС) то будет произведена авторизация под этим человеком. Если Ваших данных еще не было в системе ИИС МФЦ, будет создан новый.
Сравнение вариантов подключения к ЕСИА
Сравнение вариантов подключения к ЕСИА
УниверсальностьИспользовать протоколы OpenID Connect / OAuth может система любой организации, которой разрешено подключение ЕСИА.
Поддержка ГОСТ-криптографииПри взаимодействии системы с ЕСИА можно использовать ГОСТ-криптографию и квалифицированные сертификаты электронной подписи, а не только зарубежный алгоритм RSA.
Актуальность получаемых сведенийСистема получает сведения о пользователе, актуальные на момент выполнения запроса к REST-сервисам ЕСИА.
Полнота получаемых сведенийСистема получает все сведения о пользователе, а не только те, что ассоциированы с ролью, выбранной пользователем в момент входа. Например, можно запросить список всех организаций, в которые включен пользователь ЕСИА.
Получение сведений оффлайнСистема может продолжать получать от ЕСИА данные о пользователе, даже когда пользователь завершает свою онлайн-сессию.
С использованием SAML
ОграниченностьСогласно регламенту Минкомсвязи использовать SAML для подключения к ЕСИА разрешено только системам органов власти и учреждениям, оказывающим государственные услуги.
Только зарубежная криптографияПри взаимодействии системы с ЕСИА можно использовать только RSA и только неквалифицированные сертификаты.
Неактуальные сведенияСистема получает сведения о пользователе, актуальные на момент самой первой аутентификации пользователя, а не на момент SSO-входа в приложение. В случае обновления пользователем сведений в ЕСИА в течение сессии эти изменения остаются невидимыми системам до момента перевхода пользователя.
Фрагментарность получаемых сведенийНе все сведения о пользователе можно получить по SAML. Получаемые сведения ограничены текущей ролью, выбранной пользователем при входе.
Получение сведений только онлайнСистема может получать от ЕСИА данные только в момент входа пользователя.
В 2017 году Минкомсвязь России внесла уточнение в регламент подключения к ЕСИА
С 01.01.2018 г. никакие системы больше не могут быть подключены к ЕСИА по протоколу SAML 2.0. Возможность использования этого протокола сохранится только для ранее подключенных систем. Для подключения к ЕСИА необходимо использовать протокол OAuth 2.0 / OpenID Connect.
Для подключения к ЕСИА с использованием протоколов OpenID Connect 1.0 / OAuth 2.0 рекомендуем воспользоваться ESIA-Bridge — нашим программным обеспечением, которое берет на себя все задачи по взаимодействию с ЕСИА в целях идентификации и аутентификации пользователей.
В этой статье я напишу как я прикручивал ЕСИА к сайту, возможны и другие сценарии.
Первым делом надо создать сертификат для генерации подписи в формате pfx с закрытым ключем.
Для этого я использовал «PFX Certificate Generator». В настройках указывается служебная информация и информация для хеширования: sha256, длина ключа 2048.
После этого надо установить сертификат. Добавляем оснастку для сертификатов. открываем ветку «локальное хранилище», потом импортируем туда наш сгенеренный сертификат. Потом копируем его в ветку «Доверенные корневые».
После этого надо поставить к нему разрешение. В ветке «Личные» находим наш импортированный сертификат кликаем правой кнопкой мыши выбираем «Все задачи» потом «Управление закрытыми ключами». Далее добавляем разрешения на группу «Все».
После этого надо экспортировать наш сертификат в формате cer и передать в ЕСИА, там его зарегистрируют.
Вот в принципе и все. Один запрос, редирект + 2 запроса для получения маркера и информации о пользователе.
В дополнение можно проверять подпись маркера.
Получение данных об организациях возможно только при использовании offline-режима получения данных о пользователе. Этот процесс включает следующие шаги:
1. Проведение аутентификации пользователя с помощью offline-режима, по результатам которого у вызывающей системы будет следующая информация:
2. Вызов специального сервиса ESIA-Bridge, позволяющего получить данные об организации. Для этого необходимо выполнить HTTP-запрос методом POST на адрес точки получения данных об организации (/blitz/bridge/organization). Особенности запроса:
Пример запроса на получение данных об организации:
Возможные варианты ответа ESIA-Bridge на такой запрос:
Все, что требуется системе, – направить браузер пользователя по ссылке из ответа, указав корректный hostname ESIA-Bridge. Переход по этой ссылке инициирует в ЕСИА получение разрешения на доступ к данной организации. После того, как пользователь даст разрешение, ESIA-Bridge вернет пользователя по адресу, указанному в redirect_url и поставит новую сессионную cookie с новым ключом доступа tokenSCS. Получив обновленный ключ доступа, система должна повторно вызвать сервис получения данных об организации.
Пример ответа, содержащего в себе данные организации, ее сотрудников и филиалов:
После получения ответа рекомендуется сохранить данные обновленного ключа доступа scsToken. Это позволит в будущем обновить данные об организации, ее сотрудниках и филиалах в offline-режиме, т.е. без участия пользователя.
Покажите код!
Одновременно сохраняя стейт для последующей проверки.
Получаем данные пользователя
Проверяя стейт и меняя код на аутентификационный токен.
Как обновить токен?
Стандартно, как описано в документации к oauth2-client: https://github.com/thephpleague/oauth2-client#refreshing-a-token
Часто задаваемые вопросы (FAQ) по ЕСИА
Пакет заоперсорсен финтех-компанией в которой я работаю. Не тестировалось на животных.

