Взаимодействие со шлюзом в рамках СМЭВ HTTP API
В данном разделе приводится пошаговое взаимодействие клиентской системы и шлюза, по адресу https://demo.gate.esia.pro/. В качестве клиентской ИС рассматривается система с идентификатором a4fb804bfdf54df4f4da7faae24375e6, секретом 6cd6a2bd732bb66fed6ff7fd7ca2442ccc316a8e6764cbea4e8ad589407a4c28 и путями возврата (https://ya.ru, https://ya.ru/userinfo/callback
Схема процесса взаимодействия между Клиентской ИС, ЕСИА Шлюзом и СМЭВ
ЕСИА Шлюз хранит так же транспортную информацию (scopes, redirect_uri, время запроса, авторизационный код ЕСИА) и SHA-512 от ФИО и СНИЛСа пользователя. Эти данные необходимы для обработки внештатных ситуаций, таких как составление заявки в службу поддержки ЕСИА и реагирование на запросы правоохранительных органов и не являются персональными данными.
Авторизация (Получение авторизационного кода)
/auth/authorize
Параметры:
- client_id - идентификатор клиентской системы на стороне шлюза;
- response_type - тип ответа (допустимое значение
code); - provider - наименование провайдера данных (в рамках взаимодействия со СМЭВ нужно указать
smev_oauth); - scope - набор областей доступа:
- для provider=smev_oauth допустимое значение
openid;
- для provider=smev_oauth допустимое значение
- redirect_uri - путь возврата индивидуален для конкретного клиента, на который будет перенаправлен пользователь после авторизации со стороны ЕСИА (должен полностью совпадать с URL возврата, указанным в настройках системы на стороне шлюза);
- state - набор случайных символов, имеющий вид 128 битного идентификатора запроса, сформированного по стандарту UUID. Необходим для предотвращения CSRF атак;
- nonce - набор случайных символов, имеющий вид 128 битного идентификатора запроса, сформированного по стандарту UUID. Необходим для предотвращения подделки токена идентификации;
- person_filter - необязательный параметр, позволяющий производить авторизацию только для определенных групп лиц, перечень значений можно найти в https://adm.digital.gov.ru/app/uploads. Значение передавать в обычном виде, без кодирования в Base64;
- следующие параметры указываются в запросе только в случае наличия значения smev_oauth для параметра provider:
- permissions - перечень scope запрашиваемых в рамках типов согласий;
- purposes - мнемоники целей. Список допустимых значений указан в таблице 2 "Реестр целей" в Сценарии использования инфраструктуры Цифрового профиля;
- sysname - мнемоника типа согласия. Список допустимых значений указан в таблице 1 "Реестр типов согласий" в Сценарии использования инфраструктуры Цифрового профиля;
- actions - мнемоника действия. Список допустимых значений указан в таблице 3 "Реестр действий" в Сценарии использования инфраструктуры Цифрового профиля;
- responsible_object - определяет лицо или организацию, от чьего имени осуществляется обработка данных (строка ФИО или другой информацией - на усмотрение организации запрашивающей согласие). Необязательный параметр;
- expire - срок, на который будет выдано согласие после утверждения (в минутах);
- raw_documents - перечень scope, для которых будет выполняться запрос документов в исходном виде. Перечень типов документов, которые можно запрашивать в исходном виде указан в п. 5.1.8 в Методических рекомендациях по интеграции Цифрового профиля. Необязательный параметр;
- xml_documents - перечень scope, для которых будет выполняться запрос документов в виде файлов. Перечень типов документов, которые можно запрашивать в xml виде указан в п. 5.1.7 в Методических рекомендациях по интеграции Цифрового профиля. Необязательный параметр;
- pdf_documents - перечень scope, для которых будет выполняться запрос документов в виде файлов. Перечень типов документов, которые можно запрашивать в pdf виде указан в п. 5.1.7 в Методических рекомендациях по интеграции Цифрового профиля. Необязательный параметр;
- file_documents - перечень scope, для которых будет выполняться запрос документов в виде файлов. Перечень типов документов, которые можно запрашивать в zip виде указан в п. 5.1.13 в Методических рекомендациях по интеграции Цифрового профиля. Необязательный параметр;
- ext_documents - перечень scope, для которых будет выполняться запрос перечня ссылок на файлы, полученные от ведомства, детализирующие документы определённого типа. Перечень типов документов, для которых можно запрашивать перечень ссылок указан в п. 5.1.10 в Методических рекомендациях по интеграции Цифрового профиля. Необязательный параметр;
- permission_types - при запросе нескольких типов согласий, вышеуказанные smev_oauth параметры отправляются в списке объектов. Необязательный параметр;
Параметры
raw_documents,xml_documents,pdf_documents,file_documents,ext_documentsоставлены для совместимости с запросом в ЦПГ. На данный момент они не влияют на формат ответа из СМЭВ. Работа с ними может быть пересмотрена.
Примеры
Для инициации процесса получения доступа к цифровому профилю гражданина и платформе согласий необходимо сформировать авторизационный запрос и передать его на соответствующий URL шлюза. При этом в запросе необходимо:
- значение параметра provider установить в
smev_oauth; - в параметре scope указать
openid; - указать обязательные параметры
permissions,purposes(например, CREDIT из методических рекомендаций),sysname(CREDIT из методических рекомендаций),actions(ALL_ACTIONS_TO_DATA),expire(60); - при необходимости, указать опциональный параметр
responsible_object(Иванов Иван Иванович).
Для клиентской системы с вышеуказанными параметрами авторизационный запрос будет иметь следующий вид:
https://demo.gate.esia.pro/auth/authorize?client_id=a4fb804bfdf54df4f4da7faae24375e6&response_type=code&scope=openid&redirect_uri=https://ya.ru&provider=smev_oauth&permissions=fullname&purposes=CREDIT&sysname=CREDIT&actions=ALL_ACTIONS_TO_DATA&expire=3&responsible_object=Иванов Иван Иванович&state=1a73f168-4485-11ed-b878-0242ac120002&nonce=5f32db1a-85cc-4fb1-bad6-1751cc225d49
Для запроса нескольких целей согласия нужно указать их в запросе в параметре purposes. Должна получиться ссылка следующего вида:
https://demo.gate.esia.pro/auth/authorize?client_id=a4fb804bfdf54df4f4da7faae24375e6&response_type=code&redirect_uri=https://ya.ru&scope=openid&provider=smev_oauth&permissions=fullname&sysname=CREDIT&purposes=CREDIT+REG_QUESTIONNAIRE+UPD_CUSTOMER_INF&actions=ALL_ACTIONS_TO_DATA&expire=5&state=1a73f168-4485-11ed-b878-0242ac120002
Для запроса нескольких типов согласий нужно перечислить все необходимые параметры в списке объектов permission_types. Должна получиться ссылка следующего вида:
https://demo.gate.esia.pro/auth/authorize?client_id=a4fb804bfdf54df4f4da7faae24375e6&response_type=code&scope=openid&redirect_uri=https://ya.ru&provider=smev_oauth&permission_types[][permissions]=fullname%20gender%20snils&permission_types[][purposes]=CREDIT&permission_types[][sysname]=CREDIT&permission_types[][actions]=ALL_ACTIONS_TO_DATA&permission_types[][expire]=60&permission_types[][permissions]=fullname%20gender%20birthplace%20addresses&permission_types[][purposes]=CREDIT_CARD&permission_types[][sysname]=CREDIT_CARD&permission_types[][actions]=ALL_ACTIONS_TO_DATA&permission_types[][expire]=60&state=1a73f168-4485-11ed-b878-0242ac120002
В случае успешной авторизации произойдет редирект на url следующего вида:
https://ya.ru/?code=ef8b0177d144b628c177260bd4aa4f444f14a1091a02189d6e691f441e0a85e5&state=1a73f168-4485-11ed-b878-0242ac120002
где, в параметре code передается авторизационный код.
В случае возникновения ошибки будет редирект на url возврата с указанием ошибки:
https://ya.ru/?error=bad_request&error_description=Нет+ни+одного+поддерживаемого+скоупа&state=1a73f168-4485-11ed-b878-0242ac120002
где, в параметрах error и error_description хранится информация об ошибке.
Получение токена доступа (Обмен авторизационного кода на токен доступа)
/auth/token
Параметры:
- grant_type - тип разрешения (допустимое значение
authorization_code); - redirect_uri - путь возврата индивидуален для конкретного клиента, на который будет перенаправлен пользователь. Должен совпадать с URL возврата, указанным при получении авторизационного кода;
- client_id – идентификатор клиентской системы на стороне шлюза;
- code - авторизационный код;
- client_secret - секрет клиентской системы на стороне шлюза.
На предыдущем шаге после успешной авторизации в ЕСИА был получен авторизационный код, который следует обменять на токен доступа (access_token) для его последующего использования при получении пользовательских данных. Один код можно обменять только на один токен. Для этого отправляем POST запрос на url:
https://demo.gate.esia.pro/auth/token
со следующими параметрами запроса:
- grant_type=authorization_code;
- redirect_uri=https://ya.ru – путь возврата индивидуален для конкретного клиента, на который будет перенаправлен пользователь;
- client_id=a4fb804bfdf54df4f4da7faae24375e6 – идентификатор клиентской системы на стороне шлюза;
- code - авторизационный код;
- client_secret=6cd6a2bd732bb66fed6ff7fd7ca2442ccc316a8e6764cbea4e8ad589407a4c28 - секрет клиентской системы на стороне шлюза.
Пример запроса получения access_token:
curl -X POST https://demo.gate.esia.pro/auth/token -d "grant_type=authorization_code&client_id=a4fb804bfdf54df4f4da7faae24375e6&code=df09baaf1cd797565471eb519caead41ea23174acb5f18615f87c479330dc3d6&client_secret=6cd6a2bd732bb66fed6ff7fd7ca2442ccc316a8e6764cbea4e8ad589407a4c28&redirect_uri=https://ya.ru"
Будет получен следующий ответ:
{
"access_token": "eyJraWQiOiJGMGZhSE0yeHVic0pobXRSYmJmN1c1bzFGV1hpTTFLQ3JTRmZVV1Y0SmlNIiwidHlwIjoiSldUIiwic2J0IjoiYWNjZXNzIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJFc2lhLnBybyIsImlhdCI6MTY0NDI0MjYwMCwianRpIjoiNTFhZDU3MWQtMzBlOS00MjAwLWI2YjItOWVkOTdjOTFiM2UyIiwidXNlciI6eyJpZCI6MywidWlkIjoiMTAwMDQ4NjQ0NiIsImVzaWFfdG9rZW4iOiJleUoyWlhJaU9qRXNJblI1Y0NJNklrcFhWQ0lzSW5OaWRDSTZJbUZqWTJWemN5SXNJbUZzWnlJNklsSlRNalUySW4wLmV5SnVZbVlpT2pFMk5EUXlOREkxTmpJc0luTmpiM0JsSWpvaVpuVnNiRzVoYldVX2IybGtQVEV3TURBME9EWTBORFlnYjNCbGJtbGtJaXdpYVhOeklqb2lhSFIwY0RwY0wxd3ZaWE5wWVMxd2IzSjBZV3d4TG5SbGMzUXVaMjl6ZFhOc2RXZHBMbkoxWEM4aUxDSjFjbTQ2WlhOcFlUcHphV1FpT2lKaE4yWm1NR1E1TlMwMVpHWTBMVFJqTVdFdFlqVTROQzAxTXpKa1pXUTBOV0psTVRZaUxDSjFjbTQ2WlhOcFlUcHpZbXBmYVdRaU9qRXdNREEwT0RZME5EWXNJbVY0Y0NJNk1UWTBOREkwTXpFMk1pd2lhV0YwSWpveE5qUTBNalF5TlRZeUxDSmpiR2xsYm5SZmFXUWlPaUl5TlRBMU1ERWlmUS50YlMyUHltUVd3TXhtM0phOWZlWmNWV0ZUSnJpNWFBd2M4VTJjek1McVduVDhxdUFUN2RXUEEzTlVGMHR6REJBQ3hQVXAwa2N2dzAxalluX0lpWEpxN1VFQVBQTnVQcGhjNnl6VkgyWXpmVkd4bDEwUzYwc1BHSGs4Mk5mVnVhdHVKQ0hpWkZtNzhSUmZhZEZVNXVxN0FQdkpYeTdUMDFFN1ItM0Mza1RrQWFYNExmaFVMTjF3cDJyYkVQQUpSRTJtdGw3WTdIR195YXdvTkNhMGJaNDlxWUFRN2hUUXNOWVNHd3hXNUZvQTZtM2lDOUp3VFA0Q21fTklHd1lhWTUtX0JnOXU1a2xKYU84aUZha2FXakl1ckNWWURNNm1nZ0ZwUmtuLUs4VU9VNkhraG5ydVV6TXQ5N1c3Z1lHell2WjJZR1dZY0hhZ2VYZVBaM1NqYkloMEEiLCJlYnNfc2Vzc2lvbl9pZCI6bnVsbH0sImNpX3N5c3RlbSI6eyJpZCI6M319.sHqzx-2BHrq2pu6MgsAQYdOFoqQGwHLkevHZB5IqPwrQdovwjjHfOu6R6iNYIflmQKxRThsM3DOblZcjmvZq8VXWtrTPC-GkQnXklwPnqZ22jMS_UF8fIOUtKOlKVShmrAmUInrPQ0S-RvFWdpP7tudFiePR-GfukgEtVTosIHaMO1K3x55ON5aTix0i9UEYERon0IJ0rX0vF3NibBkOgHqTmPGni5eFMdgKPy1W8jEWu0OS-IIN495cSTq3WMSiY899A8ZkowNBJTdD61XSBS2n-vGL0kM2yrRBx9KKcfCIelj8p1GDHR09KY-YmBJ8o1-nAPPHKa4Xd693VwdDVw",
"token_type": "Bearer",
"expires_in": 600,
"refresh_token": "GeIXIpZ1R1IXL5uGI7AZKJUS8Q-mQEOJFrHRhJcn2cM",
"scope": "openid",
"created_at": 1644242600,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IkpzcTc4bnhUR01OSFZFc1YwVEdYOEFaSlA0V1lQSEFWUE9URmt4bnk1aTgifQ.eyJpc3MiOiJsb2NhbGhvc3Q6MzAwMCIsInN1YiI6IjMiLCJhdWQiOiJGMGZhSE0yeHVic0pobXRSYmJmN1c1bzFGV1hpTTFLQ3JTRmZVV1Y0SmlNIiwiZXhwIjoxNjQ0MjQyNzIwLCJpYXQiOjE2NDQyNDI2MDB9.asAZd5wwjvh0NIP7FPRUWLV0Ivh-_-wXJ4skS3eYH7TOfPgTO5sUN5jp234QI2D5Zbt0kB0zADgAl1TWigT-6NTNaZQSeVhUlofOH49dONWKzUL5NXlhuOOn938tk54RMXFK66Bw8tPEIdM8smo7VwRLTQhF5cfrLYyv7xDRYXa-KtKNC72mh8PtDwoIEE5Apj8O98fxAvh0n2SBDJlfYiwJBAi3tXahiyH_-ElB0agI_6TrqQafyjJHVL9iz6GgghEPvU-0616CRbqgbMo3RxbCATEnnOFup6DCs1448Ll_9Uh-xWQiQvZ2uho_ICjQqspPb3ZakmjoZgFZ3GVgDg"
}
В поле access_token находится токен доступа необходимый для получения данных. А в refresh_token находится токен обновления необходимый для перевыпуска токена доступа.
Значение refresh_token присутствует в ответе только для провайдеров данных esia_oauth, cpg_oauth и smev_oauth.
Перевыпуск токена доступа (Обмен токена обновления на токен доступа)
/auth/token
Параметры:
- grant_type - тип разрешения (допустимое значение
refresh_token); - redirect_uri - путь возврата индивидуален для конкретного клиента;
- client_id – идентификатор клиента;
- refresh_token - токен обновления;
- client_secret - секрет клиента.
На предыдущем шаге были получены токены доступа и обновления. Токен обновления можно обменять на новый токен доступа (access_token) и, вместе с ним, токен обновления (refresh_token) для последующего использования при получении пользовательских данных. После перевыпуска токенов предыдущие токены доступа и обновления перестают работать. Для этого отправляем POST запрос на url:
https://demo.gate.esia.pro/auth/token
со следующими параметрами запроса:
- grant_type=refresh_token;
- redirect_uri=https://ya.ru – путь возврата индивидуален для конкретного клиента;
- client_id=a4fb804bfdf54df4f4da7faae24375e6 – идентификатор клиента;
- refresh_token=GeIXIpZ1R1IXL5uGI7AZKJUS8Q-mQEOJFrHRhJcn2cM - токен обновления;
- client_secret=6cd6a2bd732bb66fed6ff7fd7ca2442ccc316a8e6764cbea4e8ad589407a4c28 - секрет клиента.
Пример запроса на перевыпуск токена доступа:
curl -X POST https://demo.gate.esia.pro/auth/token -d "grant_type=refresh_token&client_id=a4fb804bfdf54df4f4da7faae24375e6&refresh_token=GeIXIpZ1R1IXL5uGI7AZKJUS8Q-mQEOJFrHRhJcn2cM&client_secret=6cd6a2bd732bb66fed6ff7fd7ca2442ccc316a8e6764cbea4e8ad589407a4c28&redirect_uri=https://ya.ru"
Будет получен следующий ответ:
{
"access_token": "eyJraWQiOiJGMGZhSE0yeHVic0pobXRSYmJmN1c1bzFGV1hpTTFLQ3JTRmZVV1Y0SmlNIiwidHlwIjoiSldUIiwic2J0IjoiYWNjZXNzIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJFc2lhLnBybyIsImlhdCI6MTY0NDI0MjYwMCwianRpIjoiNTFhZDU3MWQtMzBlOS00MjAwLWI2YjItOWVkOTdjOTFiM2UyIiwidXNlciI6eyJpZCI6MywidWlkIjoiMTAwMDQ4NjQ0NiIsImVzaWFfdG9rZW4iOiJleUoyWlhJaU9qRXNJblI1Y0NJNklrcFhWQ0lzSW5OaWRDSTZJbUZqWTJWemN5SXNJbUZzWnlJNklsSlRNalUySW4wLmV5SnVZbVlpT2pFMk5EUXlOREkxTmpJc0luTmpiM0JsSWpvaVpuVnNiRzVoYldVX2IybGtQVEV3TURBME9EWTBORFlnYjNCbGJtbGtJaXdpYVhOeklqb2lhSFIwY0RwY0wxd3ZaWE5wWVMxd2IzSjBZV3d4TG5SbGMzUXVaMjl6ZFhOc2RXZHBMbkoxWEM4aUxDSjFjbTQ2WlhOcFlUcHphV1FpT2lKaE4yWm1NR1E1TlMwMVpHWTBMVFJqTVdFdFlqVTROQzAxTXpKa1pXUTBOV0psTVRZaUxDSjFjbTQ2WlhOcFlUcHpZbXBmYVdRaU9qRXdNREEwT0RZME5EWXNJbVY0Y0NJNk1UWTBOREkwTXpFMk1pd2lhV0YwSWpveE5qUTBNalF5TlRZeUxDSmpiR2xsYm5SZmFXUWlPaUl5TlRBMU1ERWlmUS50YlMyUHltUVd3TXhtM0phOWZlWmNWV0ZUSnJpNWFBd2M4VTJjek1McVduVDhxdUFUN2RXUEEzTlVGMHR6REJBQ3hQVXAwa2N2dzAxalluX0lpWEpxN1VFQVBQTnVQcGhjNnl6VkgyWXpmVkd4bDEwUzYwc1BHSGs4Mk5mVnVhdHVKQ0hpWkZtNzhSUmZhZEZVNXVxN0FQdkpYeTdUMDFFN1ItM0Mza1RrQWFYNExmaFVMTjF3cDJyYkVQQUpSRTJtdGw3WTdIR195YXdvTkNhMGJaNDlxWUFRN2hUUXNOWVNHd3hXNUZvQTZtM2lDOUp3VFA0Q21fTklHd1lhWTUtX0JnOXU1a2xKYU84aUZha2FXakl1ckNWWURNNm1nZ0ZwUmtuLUs4VU9VNkhraG5ydVV6TXQ5N1c3Z1lHell2WjJZR1dZY0hhZ2VYZVBaM1NqYkloMEEiLCJlYnNfc2Vzc2lvbl9pZCI6bnVsbH0sImNpX3N5c3RlbSI6eyJpZCI6M319.sHqzx-2BHrq2pu6MgsAQYdOFoqQGwHLkevHZB5IqPwrQdovwjjHfOu6R6iNYIflmQKxRThsM3DOblZcjmvZq8VXWtrTPC-GkQnXklwPnqZ22jMS_UF8fIOUtKOlKVShmrAmUInrPQ0S-RvFWdpP7tudFiePR-GfukgEtVTosIHaMO1K3x55ON5aTix0i9UEYERon0IJ0rX0vF3NibBkOgHqTmPGni5eFMdgKPy1W8jEWu0OS-IIN495cSTq3WMSiY899A8ZkowNBJTdD61XSBS2n-vGL0kM2yrRBx9KKcfCIelj8p1GDHR09KY-YmBJ8o1-nAPPHKa4Xd693VwdDVw",
"token_type": "Bearer",
"expires_in": 600,
"refresh_token": "GeIXIpZ1R1IXL5uGI7AZKJUS8Q-mQEOJFrHRhJcn2cM",
"scope": "openid",
"created_at": 1678856341,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IkpzcTc4bnhUR01OSFZFc1YwVEdYOEFaSlA0V1lQSEFWUE9URmt4bnk1aTgifQ.eyJpc3MiOiJsb2NhbGhvc3Q6MzAwMCIsInN1YiI6IjMiLCJhdWQiOiJGMGZhSE0yeHVic0pobXRSYmJmN1c1bzFGV1hpTTFLQ3JTRmZVV1Y0SmlNIiwiZXhwIjoxNjQ0MjQyNzIwLCJpYXQiOjE2NDQyNDI2MDB9.asAZd5wwjvh0NIP7FPRUWLV0Ivh-_-wXJ4skS3eYH7TOfPgTO5sUN5jp234QI2D5Zbt0kB0zADgAl1TWigT-6NTNaZQSeVhUlofOH49dONWKzUL5NXlhuOOn938tk54RMXFK66Bw8tPEIdM8smo7VwRLTQhF5cfrLYyv7xDRYXa-KtKNC72mh8PtDwoIEE5Apj8O98fxAvh0n2SBDJlfYiwJBAi3tXahiyH_-ElB0agI_6TrqQafyjJHVL9iz6GgghEPvU-0616CRbqgbMo3RxbCATEnnOFup6DCs1448Ll_9Uh-xWQiQvZ2uho_ICjQqspPb3ZakmjoZgFZ3GVgDg"
}
Отправка запроса в СМЭВ на получение данных пользователя
/auth/userinfo
Заголовки:
- Authorization - заголовок включающий в себя данные для проверки подлинности.
Параметры:
- redirect_uri - путь возврата данных из СМЭВ.
Для получения данных отправляется POST запрос на url:
https://demo.gate.esia.pro/auth/userinfo
со следующими параметрами запроса:
- redirect_uri=https://ya.ru/userinfo/callback - путь возврата данных из СМЭВ.
со следующими заголовками запроса:
- Authorization: Bearer [access_token]
Пример запроса на получение данных:
curl -X POST https://demo.gate.esia.pro/auth/userinfo?redirect_uri=https://ya.ru/userinfo/callback -H "Authorization: Bearer eyJraWQiOiJGMGZhSE0yeHVic0pobXRSYmJmN1c1bzFGV1hpTTFLQ3JTRmZVV1Y0SmlNIiwidHlwIjoiSldUIiwic2J0IjoiYWNjZXNzIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJFc2lhLnBybyIsImlhdCI6MTY0NDI0MjYwMCwianRpIjoiNTFhZDU3MWQtMzBlOS00MjAwLWI2YjItOWVkOTdjOTFiM2UyIiwidXNlciI6eyJpZCI6MywidWlkIjoiMTAwMDQ4NjQ0NiIsImVzaWFfdG9rZW4iOiJleUoyWlhJaU9qRXNJblI1Y0NJNklrcFhWQ0lzSW5OaWRDSTZJbUZqWTJWemN5SXNJbUZzWnlJNklsSlRNalUySW4wLmV5SnVZbVlpT2pFMk5EUXlOREkxTmpJc0luTmpiM0JsSWpvaVpuVnNiRzVoYldVX2IybGtQVEV3TURBME9EWTBORFlnYjNCbGJtbGtJaXdpYVhOeklqb2lhSFIwY0RwY0wxd3ZaWE5wWVMxd2IzSjBZV3d4TG5SbGMzUXVaMjl6ZFhOc2RXZHBMbkoxWEM4aUxDSjFjbTQ2WlhOcFlUcHphV1FpT2lKaE4yWm1NR1E1TlMwMVpHWTBMVFJqTVdFdFlqVTROQzAxTXpKa1pXUTBOV0psTVRZaUxDSjFjbTQ2WlhOcFlUcHpZbXBmYVdRaU9qRXdNREEwT0RZME5EWXNJbVY0Y0NJNk1UWTBOREkwTXpFMk1pd2lhV0YwSWpveE5qUTBNalF5TlRZeUxDSmpiR2xsYm5SZmFXUWlPaUl5TlRBMU1ERWlmUS50YlMyUHltUVd3TXhtM0phOWZlWmNWV0ZUSnJpNWFBd2M4VTJjek1McVduVDhxdUFUN2RXUEEzTlVGMHR6REJBQ3hQVXAwa2N2dzAxalluX0lpWEpxN1VFQVBQTnVQcGhjNnl6VkgyWXpmVkd4bDEwUzYwc1BHSGs4Mk5mVnVhdHVKQ0hpWkZtNzhSUmZhZEZVNXVxN0FQdkpYeTdUMDFFN1ItM0Mza1RrQWFYNExmaFVMTjF3cDJyYkVQQUpSRTJtdGw3WTdIR195YXdvTkNhMGJaNDlxWUFRN2hUUXNOWVNHd3hXNUZvQTZtM2lDOUp3VFA0Q21fTklHd1lhWTUtX0JnOXU1a2xKYU84aUZha2FXakl1ckNWWURNNm1nZ0ZwUmtuLUs4VU9VNkhraG5ydVV6TXQ5N1c3Z1lHell2WjJZR1dZY0hhZ2VYZVBaM1NqYkloMEEiLCJlYnNfc2Vzc2lvbl9pZCI6bnVsbH0sImNpX3N5c3RlbSI6eyJpZCI6M319.sHqzx-2BHrq2pu6MgsAQYdOFoqQGwHLkevHZB5IqPwrQdovwjjHfOu6R6iNYIflmQKxRThsM3DOblZcjmvZq8VXWtrTPC-GkQnXklwPnqZ22jMS_UF8fIOUtKOlKVShmrAmUInrPQ0S-RvFWdpP7tudFiePR-GfukgEtVTosIHaMO1K3x55ON5aTix0i9UEYERon0IJ0rX0vF3NibBkOgHqTmPGni5eFMdgKPy1W8jEWu0OS-IIN495cSTq3WMSiY899A8ZkowNBJTdD61XSBS2n-vGL0kM2yrRBx9KKcfCIelj8p1GDHR09KY-YmBJ8o1-nAPPHKa4Xd693VwdDVw"
На основе полученного токена доступа Шлюз отправит запрос в СМЭВ по виду сведений "Запрос персональных данных пользователя ЕСИА при наличии его согласия" и вернет КИС ответ с уникальным идентификатором Шлюза для запроса в СМЭВ.
Примеры ответа:
В случае успешной отправки запроса в СМЭВ Шлюз вернет идентификатор запроса:
{
"ticket_id": "gosmev-ticket-f7e17168-bb4c-4db1-841b-477bb9a8f02a"
}
В случае возникновения ошибок будет получен ответ вида:
{
"error": "invalid_token",
"error_description": "Неверный токен доступа"
}
Обработка callback-а Шлюзом при получении ответа из СМЭВ
После получения ответа из СМЭВ шлюз обрабатывает XML: извлекает файлы из архива и преобразует структуру ответа в удобный для дальнейшего использования формат. По завершении обработки шлюз отправляет POST-запрос на указанный redirect_uri, переданный при инициировании запроса на получение данных пользователя.
Структура финального ответа
| Параметр | Обязательный | Описание | Пример |
|---|---|---|---|
ticket_id |
да | Идентификатор запроса в СМЭВ | gosmev-ticket-f7e17168-bb4c-4db1-841b-477bb9a8f02a |
info |
да (при успешном ответе) | Объект с персональными данными и документами пользователя | См. описание поля ниже |
provider_id |
да (при успешном ответе) | Идентификатор сообщения в СМЭВ | 94e3c70c-1e1f-11f1-879d-16dff30dd83d |
scope |
да | Массив запрошенных scope | ["fullname", "birthdate"] |
error |
да (при ошибке) | Код ошибки | unexpected_error |
error_description |
да (при ошибке) | Описание ошибки | Отправитель сообщения не зарегистрирован |
Структура поля info
Поле info содержит два вида данных: персональные данные и документы.
Персональные данные (когда статус SUCCEEDED)
Для следующих scope-ов данные попадают в плоскую структуру info:
| Scope | Описание | Пример |
|---|---|---|
fullname |
Фамилия, имя, отчество | { "firstName": "Александр", "middleName": "Викторович", "lastName": "Наличников" } |
birthdate |
Дата рождения | "04.10.1995" |
birthplace |
Место рождения | "г. Москва" |
gender |
Пол | "M" или "F" |
snils |
СНИЛС | "159-756-279 05" |
inn |
ИНН | "330077654542" |
registrationAddress |
Адрес регистрации | структура адреса ниже |
homeAddress |
Адрес проживания | структура адреса ниже |
mobile |
Номер мобильного телефона | "+7(999)5675677" |
email |
Адрес электронной почты | "user@example.com" |
Адреса представлены объектом:
{
"addressStr": "г Ростов-на-Дону, ул Ткацкая, д. 3",
"region": "Ростовская",
"countryId": "RUS",
"house": "3",
"zipCode": "344016",
"city": "Ростов-на-Дону",
"street": "Ткацкая",
"fiasCode": "0482362b-51ca-4193-89fd-0edbca514c66"
}
Документы info.documents
Каждый документ представлен объектом:
| Параметр | Обязательный | Описание | Пример |
|---|---|---|---|
type |
при валидном ответе | Тип документа (см. примеры ниже) | "RF_PASSPORT" |
status |
при SUCCEEDED |
Статус обработки документа | "verified_by_request" |
oid |
при PROCESSING |
Идентификатор пользователя | "1000482766" |
requestId |
при PROCESSING |
Идентификатор запроса документа | "116850525746" |
errorStatusInfo |
при FAULT |
Информация об ошибке | структура ниже |
files |
при наличии файлов | Массив файлов с base64-содержимым | структура ниже |
XML документы, которые имеют ключи на латинице будут встроены в ответ с фильтрации всех xml-namespace. Схемы ответов по всем scope можно найти в документации по виду сведений "Запрос персональных данных пользователя ЕСИА при наличии его согласия".
Типы документов (data_type из СМЭВ):
| Код документа | Название |
|---|---|
RF_PASSPORT |
Паспорт гражданина РФ |
FRGN_PASS |
Заграничный паспорт |
RF_DRIVING_LICENSE |
Водительское удостоверение |
ILS_PFR |
Сведения о состоянии ИСС |
INCOME_REFERENCE |
Справка 2-НДФЛ |
ELECTRONIC_WORKBOOK |
Электронная трудовая |
| … |
Полный список типов документов можно найти в документации по виду сведений "Запрос персональных данных пользователя ЕСИА при наличии его согласия".
Структура errorStatusInfo:
{
"code": "ESIA-035000",
"message": "Пользователь не найден"
}
Структура files:
{
"file": "JVBERi0xLjYK...9GCg==",
"name": "PFR_777000_SZI-ILS_20260116_a570b736-f2c2-11f0-9df2-5ea1d225dce6.pdf",
"metadata": "application/pdf",
"sign": "MIIE...ABAgM="
}
Примеры ответов
Успешное получение персональных данных и документов
{
"ticket_id": "gosmev-ticket-9d04abcf-35bf-45cc-8cdd-5a85aeb09bf8",
"info": {
"firstName": "Александр",
"middleName": "Викторович",
"lastName": "Наличников",
"snils": "159-756-279 05",
"inn": "330077654542",
"birthDate": "04.10.1995",
"registrationAddress": {
"addressStr": "г Ростов-на-Дону, ул Ткацкая",
"region": "Ростовская",
"countryId": "RUS",
"house": "3",
"zipCode": "344016",
"city": "Ростов-на-Дону",
"street": "Ткацкая",
"fiasCode": "0482362b-51ca-4193-89fd-0edbca514c66"
},
"homeAddress": {
"addressStr": "г Ростов-на-Дону, ул Ткацкая",
"region": "Ростовская",
"countryId": "RUS",
"house": "3",
"zipCode": "344016",
"city": "Ростов-на-Дону",
"street": "Ткацкая",
"fiasCode": "0482362b-51ca-4193-89fd-0edbca514c66"
},
"documents": [
{
"type": "RF_PASSPORT",
"status": "verified_by_validate",
"receiptDocDate": "1614526986650",
"validateDateDoc": "1614526986000",
"baseDoc": {
"series": "4712",
"number": "720101",
"issued": "12.04.2008"
},
"issuedBy": "ОТДЕЛЕНИЕМ УФМС РОССИИ ПО ЭНСКОМУ КРАЮ В ГОРОДЕ ЭНСКЕ",
"issueId": "485024",
"files": [
{
"file": "PD94bWwgdmVy...0Pgo=",
"name": "RF_PASSPORT_edd0efa7-ab22-4801-8dd6-a8ffd90f96ed.xml",
"metadata": "application/xml"
}
]
},
{
"type": "ILS_PFR",
"status": "verified_by_request",
"receiptDocDate": "1768644838273",
"validateDateDoc": "1768644838273",
"files": [
{
"file": "JVBERi0xLjYK...9GCg==",
"name": "PFR_777000_SZI-ILS_20260117_b81e1c6f-f366-11f0-bd40-5ea6041d7ea7.pdf",
"metadata": "application/pdf"
},
{
"file": "PD94bWwgdmVyc...CgPg==",
"name": "PFR_777000_SZI-ILS_20260117_b81e1c6f-f366-11f0-bd40-5ea6041d7ea7.xml",
"metadata": "application/xml"
}
]
},
{
"type": "ELECTRONIC_WORKBOOK",
"requestId": "116850525746",
"oid": "1094980461"
}
]
},
"provider_id": "94e3c70c-1e1f-11f1-879d-16dff30dd83d",
"scope": [
"fullname",
"birthdate",
"snils",
"inn",
"id_doc",
"ils_doc",
"electronic_workbook"
]
}
Статус PROCESSING (документ отсутствует в СМЭВ)
{
"ticket_id": "gosmev-ticket-abc123",
"info": {
"documents": [
{
"type": "PENSION_REFERENCE",
"requestId": "6242357477",
"oid": "1063913797"
}
]
},
"provider_id": "7475b0c9-13b0-11f1-9c51-82ae8eff723c",
"scope": ["pension_reference"]
}
Описание: Документ запрашивается в ведомстве. Необходимо совершить повторный запрос по этому scope позже.
Статус FAULT (ошибка обработки документа)
{
"ticket_id": "gosmev-ticket-1d77321d-56f7-4fd9-8c68-83ab5c003078",
"info": {
"documents": [
{
"type": "PENSION_REFERENCE",
"errorStatusInfo": {
"code": "ESIA-201584",
"message": "Отсутствует актуальное согласие пользователя на передачу персональных данных указанного типа"
}
}
]
},
"provider_id": "7475b0c9-13b0-11f1-9c51-82ae8eff723c",
"scope": ["pension_reference"]
}
Непредвиденная ошибка
Данный ответ может возникнуть, если от СМЭВ пришла ошибка в виде текста или Шлюз не смог обработать ответ
{
"ticket_id": "gosmev-ticket-49d481fa-f96e-4ebe-8011-e069f6034035",
"error": "unexpected_error",
"error_description": "SOAP-ENV:Client: Отправитель сообщения не зарегистрирован.",
"scope": ["fullname", "birthdate"]
}
Получение согласий пользователя из Цифрового профиля
/auth/user_permissions
Заголовки:
- Authorization - заголовок включающий в себя данные для проверки подлинности.
Для получения данных отправляется GET или POST запрос на url:
https://demo.gate.esia.pro/auth/user_permissions
со следующими заголовками запроса:
- Authorization: Bearer [access_token]
Пример запроса на получение данных:
curl -X GET https://demo.gate.esia.pro/auth/user_permissions -H "Authorization: Bearer eyJraWQiOiJGMGZhSE0yeHVic0pobXRSYmJmN1c1bzFGV1hpTTFLQ"
На основе полученного токена доступа шлюз предоставляет список всех согласий пользователя, выданных клиентской системе.
Пример ответа в случае запроса списка выданных согласий при взаимодействии с REST API платформы согласий:
{
"elements": [
{
"stateFacts": ["Identifiable"],
"id": 74273,
"personId": 7597001,
"orgId": 7413897,
"permissionId": 1,
"sysname": "CREDIT",
"name": "Предоставление кредита (займа)",
"description": "Предоставление кредита (займа), в том числе кредита с лимитом кредитования и (или) овердрафта, выпуск и обслуживание банковской карты для обслуживания кредита (займа)",
"orgShortName": "ОРГАНИЗАЦИЯ 1181280564",
"ogrn": "2000000000002",
"orgAddress": "127434, Город Москва,Улица Дубки",
"issuedOn": 1691763799,
"expiredOn": 1691764699,
"status": "A",
"createdOn": 1691763799,
"updatedOn": 1691763799,
"signatureId": "78efb45b-21a8-48c2-af48-bbada3eebff1",
"signatureStatus": "ISSUED",
"scopes": {
"stateFacts": ["hasSize"],
"size": 9,
"elements": [
{
"stateFacts": ["ReadOnly"],
"sysname": "fullname",
"name": "Просмотр вашей фамилии, имени и отчества",
"description": "Фамилия, имя и отчество, указанные в документе, удостоверяющем личность",
"orgGroup": "Министерство внутренних дел Российской Федерации"
}
]
},
"purposes": {
"stateFacts": ["hasSize"],
"size": 1,
"elements": [
{
"stateFacts": ["ReadOnly"],
"sysname": "CREDIT",
"name": "Предоставление кредита (займа), в том числе кредита с лимитом кредитования и (или) овердрафта, выпуск и обслуживание банковской карты для обслуживания кредита (займа)"
}
]
},
"actions": {
"stateFacts": ["hasSize"],
"size": 1,
"elements": [
{
"stateFacts": ["ReadOnly"],
"sysname": "ALL_ACTIONS_TO_DATA",
"name": "Обработка персональных данных, включая сбор, запись, систематизацию, накопление, хранение, уточнение, извлечение, использование, передачу, обезличивание, блокирование, удаление, уничтожение персональных данных"
}
]
}
}
]
}
Выход из системы ЕСИА
/auth/logout
Параметры:
- client_id=a4fb804bfdf54df4f4da7faae24375e6 – идентификатор клиентской системы на стороне шлюза;
- redirect_uri=https://ya.ru – путь возврата индивидуален для конкретного клиента, на который будет перенаправлен пользователь;
- state - набор случайных символов, имеющий вид 128 битного идентификатора запроса, сформированного по стандарту UUID. Должен отличаться от набора, использованного для получения авторизационного кода. Необходим для предотвращения CSRF атак.
Для инициации процесса выхода из системы ЕСИА необходимо сформировать запрос и передать его на соответствующий URL шлюза. Для клиентской системы с вышеуказанными параметрами запрос будет иметь следующий вид:
curl https://demo.gate.esia.pro/auth/logout?client_id=a4fb804bfdf54df4f4da7faae24375e6&redirect_uri=https://ya.ru
После завершения сессии в системе ЕСИА пользователь будет перенаправлен на адрес, указанный в параметре redirect_uri.
ВАЖНО! Путь возврата пользователя обязательно должен быть указан в соответствующей КИС
Также, на технологическом портале тестовой/промышленной ЕСИА, в настройках ИС, необходимо добавить url, соответствующий точке возврата в шлюз после логаута на стороне ЕСИА.
Такой URL в данном случае будет иметь следующий вид:
https://demo.gate.esia.pro/auth/smev_oauth/logout_callback