Подключение ESIA Identity Provider#
Все действия ниже производятся под мастер-администратором (пользователь реалма master с ролью admin), или администратором\пользователем целевого реалма с ролью realm-admin.
Необходимая информация для подключения к ESIA Identity Provider#
Для подключения ESIA Identity Provider необходимо получить следующую информацию:
Сертификат либо ключ ЕСИА (ESIA Identity Provider)
Актуальные сертификаты и ключи ЕСИА можно найти по ссылке.
Для PKCS7-RSA256 используется публичный ключ (ниже уже извлеченные ключи, которые можно использовать для задания в настройке (актуальны на 04.03.2022)).
Для стенда esia-portal1.test.gosuslugi.ru
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Rw9xG1g+QQ0QgB8bwSq
xJxOU84tjHI7uhvwCnyJQAb9SNLRkeraBjmhA29oCAn9uv56kaYe9YNhqijRsNVG
yIAAZTB0EHv99xqIqdoOtv4io2o7JbxNomun7ENrOF2ZQT7Ukqr4b748FvKSGoX0
OVcB7Sru6HU7NAH1oNJ4bbNr8SeHcP4CGZsF20y/L0OjT+TENFQD9eNpOIuyWPL5
2F1apKIf5si4yTBxg9QZlBzrwuBGRW1ah2slBjJ95Fu7Q82uM5Zc7oqwFsYhni3v
HXxi1rX2HCtgAKeBb0QJ5z1KwNGovPhBNtmRPW0JTFeX0CgvHNRUsPgki566cVLb
AQIDAQAB
-----END PUBLIC KEY-----
Для стенда esia.gosuslugi.ru:
-----BEGIN PUBLIC KEY-----
MIIBCgKCAQEAg4/V4iNjYrC4gBSM7OlDbYHNqpyfUYkoRoZ+GGcTU/Vd47srTLlhFADtTcC4GangTY9p1zpm1DGO7nhVRb6IUKWt49jwRApvH2k/vo4Nlou6bwqZeeg1BVJZRGBH5UtnZ5k5gR3qKyntb+RpG3sAWfZQicH6yfoWbBS6ypfJ0EJ7GNxaeAn5akjSYMwFx4mRVG2pYo+Ly2jjd5XlbWhqnMle6sROvR4y7SaudqW2Bg7sE/8ZrYGJRBdgMn5d83M6uxOEhp4yp8TP3+NnXAxIkeK4IMaBMwzfw/OGjbS8a/UMnN1EMT4bkXbk0z/Y/5guI2H1MrrgsIQs6VQorf9JzwIDAQAB
-----END PUBLIC KEY-----
Для ГОСТ 3410 используется сертификат: ТЕСИА ГОСТ 2012.cer для тестового стенда и ГОСТ 2012 ПРОД.cer для ПРОМ.
Мнемоника (см. руководство пользователя технического портала).
Аутентификационные данные на тестовом портале esia.
Настройка хранилища ключей#
Хранилище ключей необходимо для того, чтобы хранить сертификаты и ключи, которые используются при формировании подписи запроса.
Генерация сертификатов описана в Руководстве по безопасности -> Управление ключами и сертификатами -> Генерация сертификатов (см. пункты ГОСТ 3410 сертификат (256 или 512 битный) для тестовой среды либо Генерация при помощи КриптоПро JCP для пром). Нам потребуется информация об используемых параметрах.
Проверка#
Проверить полученный формат сертификата можно на сайте госуслуги.
Подключение#
Необходимо для провайдера ЕСИА задать сертификат с ключом (используемый при аутентификации ИС в ЕСИА), для этого в Keycloak.SE можно использовать один из следующих провайдеров ключей:
gost-keystore, использует стандартные хранилища ключей (*.p12, *.pfx, *.jks, *.keystore) и библиотеки на базе открытого кода(Bouncy Castle), для ГОСТ-ключей рекомендуется тип хранилища JKS.
gost-online, использует API внешнего платформенного сервиса
DIGSдля создания и проверки ГОСТ-подписи (необходимо предварительно загрузить ГОСТ сертификат и ключ вDIGS).cryptopro-keystore, использует хранилище ключей формата КриптоПро
HDImageStore(keystore_folder/*.key) и библиотеки JCP КриптоПро.
Настройка провайдера gost-keystore#
Для подключения хранилища ключей необходимо полученный сертификат предварительно зарегистрировать в ЕСИА. (см. пункт Генерация)
Во вкладке "Настройки Realm" выбрать раздел "Ключи" и далее "Поставщики". Нажать на кнопку добавления ключей и выбрать значение gost-keystore.
На рисунке ниже изображен интерфейс добавления хранилища ключей.
На рисунке ниже изображен интерфейс подключения/настройки хранилища ключей.

Разместите хранилище ключей на сервере и укажите к нему путь в следующем параметре:
Keystore path: путь к файлу, где хранится хранилище сертификатов, в котором только 1 сертификат. Данный сертификат прописан на техническом портале ЕСИА в мнемонике.
Остальные параметры заполните данными, полученными ранее (см. пункт Генерация -> Используемые параметры).
Настройка провайдера gost-online, интеграция с сервисом ЭЦП\DIGS#
Во вкладке "Настройки Realm" выбрать раздел "Ключи" и далее "Поставщики". Нажать на кнопку добавления ключей и выбрать значение online-keystore.
Заполнить параметры и сохранить:
Sign url: {host_digs}/digs-application/v1/sign/cms/tech.
Verify url: {host_digs}/digs-application/v1/checkSign/raw (если включен флаг Raw verify type. В ином случае digs-application/v1/checkSign/cms.
KeyAlias и Verify public key Alias: alias приватного и публичного ключей.
Под alias kmsTest3 - требуется положить готовый или сгенерировать новый ГОСТ сертификат в формате КриптоПро. Инструкции запрашиваются у команды ЭЦП либо (см. пункт Генерация).
Под alias kmsTest4 должен находиться сертификат ЕСИА. Актуальный серт ЕСИА можно найти по ссылке - https://esia.gosuslugi.ru/public/esia.zip.
ESIA certificate (поле не обязательно, если включен флаг Raw verify type): Сертификат ESIA для отправки в запросах ЭЦП в формате pem. Команда для перевода сертификата в формат pem:
openssl x509 -inform der -in TESIA_GOST_2012.cer -outform pem -out <название_файле>.pem
После успешного сохранения настроек необходимо прописать сертификат с публичной частью kmsTest3 в формате der или pem.
Настройка провайдера cryptopro-keystore#
Для использования хранилища ключей КриптоПро необходимо полученный сертификат предварительно зарегистрировать в локальном хранилище HDImageStore на сервере (см. пункт Генерация при помощи КриптоПро JCP ).
Во вкладке "Настройки Realm" выбрать раздел "Ключи" и далее "Поставщики". Нажать на кнопку добавления ключей и выбрать значение сryptopro-keystore.
Заполнить параметры и сохранить:
Alias: alias приватного и публичного ключей (пример - 5dtkxlu0r5xun24w6qu6s7rg3ax7uc2jafg7102 , как посмотреть список alias в текущем хранилище описано в разделе Настройка КриптоПро JCP через командную строку ).
Keystore Password: пароль для ключа указанного в Alias.
При нажатии на кнопку "Сохранить" будет проверен доступ к ключу. В случае ошибки сохранение не произойдет, нужно будет исправить ошибку и попробовать сохранить еще раз.
Прописать сертификат на техническом портале ЕСИА#
Необходимо прописать сертификат, полученный в разделе "Генерация", на техническом портале ЕСИА. Для этого требуется пройти авторизацию под пользователем 000-000-600 06 (пароль 11111111), найти мнемонику SBER_PLATFORMAUTH и нажать на "…".
На рисунке ниже изображено главное окно технического портала ЕСИА

Появится страница управления сертификатами. Нажать на кнопку "Загрузить сертификат".

Далее загрузить и сохранить сертификат.

Вернуться на страницу поиска мнемоники и выбрать кнопку изменения настроек.

В поле "Алгоритм формирования электронной подписи" установить значение GOST3410_2012_256 и сохранить изменения.

Добавление сертификата портала ЕСИА в доверенные#
При обращении по https к endpoints ЕСИА производится проверка сертификата с этих эндпоинтов, проверка производится по базе доверенных сертификатов заданных по умолчанию для JVM (опцией javax.net.ssl.trustStore).
1. Загрузить сертификат с портала ЕСИА.
servername=esia-portal1.test.gosuslugi.ru ; openssl s_client -showcerts -connect $servername:443 -servername $servername </dev/null 2>/dev/null | openssl x509 -outform PEM >trusted_keycloak_esia_portal.crt.pem
2. Добавить в Keycloak.SE.
2.1. Standalone
2.1.1. Добавить в truststore
Если ранее уже были загружены и установлены доверенные сертификаты от ЕСИА, и позже они изменились в ЕСИА, то нужно старые удалить из базы доверенных сертификатов! Для этого можно использовать опцию развертывания keycloak_force_install=true, тогда база доверенных сертификатов будет наполняться с "нуля" при deploy(s).
Импорт средствами развертывания Скопировать trusted_keycloak_esia_portal.crt.pem в каталог профиля развертывания с файлами (например в ansible/inventories/My-STAND/files/). Запустить развертывание.
Импорт утилитой
Подключиться по ssh на сервер Keycloak.
Выполнить команду
sudo -u keycloak bashСкопировать trusted_keycloak_esia_portal.crt.pem в /opt/keycloak-4.8.3.Final/standalone/configuration/ssl и запустить из этого каталога
trusted-store-update.shПерезагрузить службу Keycloak
sudo systemctl restart keycloakИмпорт вручную
Подключиться по ssh на сервер Keycloak. Скопировать trusted_keycloak_esia_portal.crt.pem в /opt/keycloak-4.8.3.Final/standalone/configuration/ssl .
Выполнить команды:
sudo -u keycloak bash
cd /opt/keycloak-4.8.3.Final/standalone/configuration/ssl
2.1.2. Скопировать trusted_keycloak_esia_portal.crt.pem в /opt/keycloak-4.8.3.Final/standalone/configuration/ssl
keytool -delete -alias esia -keystore keycloak-application.keystore
keytool -import -alias esia -file trusted_keycloak_esia_portal.crt.pem -keystore keycloak-application.keystore
2.1.3. Перезагрузить службу Keycloak
sudo systemctl restart keycloak
2.2. Для среды контейнеризации
Необходимо добавить сертификат портала ЕСИА в папку из переменной
$KCSE_TRUSTED_CERTS. Данная переменная по умолчанию имеет значение/opt/jboss/trusted_certs.Перезагрузить
Добавление потоков аутентификации#
Добавить поток (flow) аутентификации для первого входа через ЕСИА#
Во вкладке "Аутентификация" нажать кнопку создать.
Сформировать верхнеуровневую форму(см. рисунок ниже).

На рисунке ниже изображено окно создания верхнеуровневой формы сценария аутентификации.

Заполнить новый поток "ЕСИА сценарий при первом входе" аутентификаторами, нажимая кнопку "Добавить исполнение".
Добавить два поставщика:
Create User If Unique.
Automatically Set Existing User.
На рисунках ниже изображена форма создания исполнения аутентификатора.



В итоге должен получится такой вид flow:
На рисунке ниже изображен интерфейс представления сценария аутентификации.

Добавить поток (flow), выполняемый после аутентификации#
Во вкладке "Аутентификация" нажать кнопку создать.
Сформировать верхнеуровневую форму. На рисунке ниже изображено окно создания верхнеуровневой формы сценария аутентификации.

На рисунке ниже изображен интерфейс представления сценария аутентификации.

Заполнить новый поток "ЕСИА сценарий при первом входе" аутентификаторами, нажимая кнопку "Добавить исполнение".
Порядок аутентификаторов должен быть строго следующий:
Get ESIA User Info.
ESIA Organization List.
ESIA Organization Choice.
Get ESIA User Roles.
У всех аутентификаторов должен стоять чекбокс "REQUIRED".
(интерфейс выбора действий для настройки аутентификатора)Задать параметры конфигурации для каждого:
Для Get ESIA User Info
(интерфейс настройки конфигурации аутентификатора Get ESIA User Info)Для ESIA Organization List
(интерфейс настройки конфигурации аутентификатора ESIA Organization List)Для ESIA Organization Choice
(интерфейс настройки конфигурации аутентификатора ESIA Organization Choice)Для Get ESIA User Roles
(интерфейс настройки конфигурации аутентификатора Get ESIA User Roles)
При конфигурировании сценария предусмотрено включение возможности получить роли в виде строки.При отключенном флаге "Получение ролей в виде строки" роли приходят в виде массива.
В итоге должен получится такой вид flow:
(_интерфейс настройки сценария аутентификации ЕСИА Выбор Организации)
Необходимо учитывать, что для получения соответствующих данных необходимо иметь доступ к соответствующим scope, которые указываются при получении мнемоники. Некоторые scope пользователя:
Поле |
Scope для пользователя |
|---|---|
Область доступа (scope) |
openid |
Фамилия, имя и отчество |
fullname |
СНИЛС |
snils |
Дата рождения |
birthdate |
Место рождения |
birthplace |
Документ, удостоверяющий личность: |
id_doc |
ИНН |
inn |
Пол |
gender |
Гражданство |
citizenship либо foreign_passport_doc либо id_doc |
Список организаций пользователя |
usr_org |
Загранпаспорт |
foreign_passport_doc |
Адреса |
contacts (устаревшее) либо addresses |
Контактные данные |
usr_org |
Статус валидации учетной записи |
usr_reg_cxt |
Номер мобильного телефона |
mobile |
Некоторые scope организации:
Поле |
Scope для организаций |
|---|---|
Получение кпп организаций |
org_kpp |
Получение инн организаций |
org_inn |
Получение ОГРН организаций |
org_ogrn |
Получение адресов организаций |
org_addrs |
Получение групп пользователя в выбранной организации |
org_grps |
Получение информации пользователя в выбранной организации |
org_emps |
Получение типа ОГВ (только для гос. орг) |
org_agencytype |
Получение контактов выбранной организации |
org_ctts |
Полное наименование юридического лица на русском языке |
org_fullname |
Сокращенное наименование организации |
org_shortname |
Получение типа организации |
org_type |
Получение групп пользователя в выбранной организации |
org_grps |
Получение информации пользователя в выбранной организации |
org_emps |
Получение типа ОГВ (только для гос. орг) |
org_agencytype |
Получение контактов выбранной организации |
org_ctts |
ОПФ организации |
org_leg |
Территориальная принадлежность ОГВ |
org_agencyterrange |
ОКТМО организации |
org_oktmo |
Группы, владельцем которых является организация |
org_grps |
Данные о сотруднике организации |
org_emps |
Контакты организации:телефон, факс, электронная почта |
org_ctts |
Данные о филиалах организации |
org_brhs |
*Для получения информации о КПП организаций необходимо включить флаг "Получение кпп организаций" в связке с включенным флагом "Получение инн организаций".
Полный список scope для пользователя и для организаций можно найти в методических рекомендациях по использованию ЕСИА.
Добавить нового провайдера идентификации с типом "ESIA Identity Provider"#
Установить тему platform-v у realm Master, далее обязательно обновить страницу. После обновления в левом верхнем углу страницы появится логотип PLATFORM V.

Перейти на целевой realm. Следующим шагом требуется добавить новый провайдер идентификации. Для этого на вкладке "Поставщики идентификации" выбрать добавление поставщика с типом "ESIA Identity Provider".

Указать параметры:
Мнемоника для IAM: SBER_PLATFORMAUTH или регистрируется самостоятельно в ЕСИА.
Сервер ЕСИА: для тестовых сред
esia-portal1.test.gosuslugi.ru, для Промesia.gosuslugi.ru.Только подтвержденные УЗ ЕСИА: выкл/вкл в зависимости от стенда. В данном случае флаг выкл, соответственно аутентифицироваться смогут все пользователи ЕСИА (подтвержденные и неподтвержденные УЗ).
Сопоставление УЗ ЕСИА: может иметь одно из значений ЕСИА ID, СНИЛС, ИНН, паспорт РФ.
Алгоритм подписи: (используйте данные полученные в разделе "Генерация")
Для сертификатов на RSA (работает только на тестовой ЕСИА. Выводится из эксплуатации) - PKCS7-RSA256.
Для интеграции с сервисом ЭЦП - GOST-ONLINE.
Для сертификатов на GOST (использовать на Пром) - CryptoPro-256 или CryptoPro-512.
Для сертификатов на GOST (Bouncycastle) - GOST3411WITHECGOST3410-2012-256 или GOST3411WITHECGOST3410-2012-512.
Области по умолчанию оставить пустыми (тогда будет набор по умолчанию), или заполнить "fullname birthdate inn snils id_doc email mobile contacts usr_org" для получения более полного набора атрибутов.
Установка созданных сценариев в поставщике ЕСИА
На вкладке "Поставщики идентификации" выбрать поставщика "Вход через ЕСИА". В параметрах "Сценарий первого входа" и "Сценарий после входа" установить созданные ранее потоки (flow) и сохранить.Настройка проверки подписи
Для алгоритма RSA. Включить флаг "Проверка подписей" и в поле "Проверка публичного ключа" задать содержимое публичного ключа (см. Необходимая информация для подключения к ESIA Identity Provider).
Для алгоритма ГОСТ. Сделайте так, как на скриншоте ниже и задайте ГОСТ сертификат ЕСИА (см. Необходимая информация для подключения к ESIA Identity Provider).
Остальные флаги установить как на скриншоте ниже:

Проверка аутентификации в ЕСИА#
Перейти на стенд, где установлена ЕСИА

Выбирать на форме "Вход через ЕСИА". Ввести логин/пароль и, если выпадет соглашение на предоставление прав доступа, нажать кнопку "Подтвердить".
Войти на тестовый портал ЕСИА можно под тестовым пользователем - СНИЛС 000-000-600 05.


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

В результате аутентификация прошла успешно и открылась страница с личным кабинетом пользователя с данными полученными из ЕСИА.

Настройка отдаваемой информации#
Настройка отдаваемой информации производится в основном через настройку сопоставлений (mapper) в scope и в клиентах.
Выполнить вход в Keycloak.
Открыть клиента (например, PlatformAuth-Proxy), и перейти на вкладку Сопоставления.

Добавление в id/access токен значение id пользователя ЕСИА
Нажать в сопоставлениях "Создать", и выбирать тип сопоставления "User Session Note".
Заполнить поля следующими значениями:
Имя: esia_id.
Заметка сессии пользователя: brokerUserId.
Имя переменной в токене: esia_id.
Тип переменной JSON: String.
Добавить в токен ID: вкл.
Добавить в токен доступа: вкл.
IncludeInAccessTokenResponse.lable: выкл. И нажимаем "Сохранить".

Добавление в userinfo информации о пользователе из ЕСИА
Нажать в сопоставлениях "Создать", и выбираем тип сопоставления "ESIA Info Mapper".
Заполнить поля следующими значениями:
Имя: Esia_info.
Имя переменной в токене: esia.
Остальные параметры как на скриншоте. И нажимаем "Сохранить".

Информация о пользователе из ЕСИА представляет собой JSON, который храниться в атрибуте ESIA_ATTRIBUTES в поле userSession. Данное поле содержит следующую информацию:
{
"ESIA_ATTRIBUTES": {
"org_admin": "false",
"emplInfo": "{
"chief": true,
"blocked": false
}",
"PRG": "{ #Адрес регистрации
"stateFacts": [ #Указывает на некоторые факты о предоставляемых сведениях.
"Identifiable" #Есть идентификатор (например, это конкретный контакт или документ);
],
"id": 82319,
"type": "PRG", #Тип адреса. Например: "PRG" - адрес регистрации, "PLV" - адрес проживания
"addressStr": "г Челябинск, пр-кт Ленина", #Адресная строка.
"fiasCode": "111aee11-11db-11ff-11c1-1b11c11cd1b1", #Код ФИАС.
"flat": "10", #Квартира.
"countryId": "RUS", #Трехбуквенный код страны.
"house": "10", #Дом
"zipCode": "454007", #Индекс
"city": "Челябинск", #Город.
"street": "Ленина", #Улица.
"region": "Челябинская", #Область.
"settlement": "", #Населенный пункт.
"additionArea": "", #Уточнение по региону проживания.
"additionAreaStreet": "", #Уточнение по улице.
"building": "", #Строение.
"frame": "", #Корпус
"eTag": "149C30082A499D2C01E3FF98355BCBA22996C70C" #Тег изменяемого объекта.
}",
"citizenship": "RUS", #Гражданство по классификатору OKCM.
"roles": "[
"SBER_PLATFORMAUTH:ESUGI_GT_SIGNATURE",
"SBER_PLATFORMAUTH:ESUGI_GT_BASE",
"SBER_PLATFORMAUTH:ESUGI_GT_DELIVERY_CONFIRM"
]",
"org_type": "BUSINESS", #Тип организации.
"org_prnOid": "1000466562", #Идентификатор сотрудника организации.
"org_active": "true",
"org_shortName": "ИП Иванов И. И.", #Сокращенное название организации.
"org_hasRightOfSubstitution": "true",
"org_ogrn": "314119464291534", #ОГРН организации.
"org_fullName": "ИП Иванов И. И.", #Полное наименование организации.
"org_branchOid": 1000326290, #Идентификатор филиала
"org_branchKpp": 888888888, #КПП филиала
"organization": "1000466576", #Идентификатор организации.
"org_branсhName": "Главный Филиал 493246577", #Наименование филиала
"organizations": "[
{
"oid": "1000466576", #Идентификатор организации.
"prnOid": "1000466562", #Идентификатор сотрудника организации.
"fullName": "ИП Иванов И. И.", #Полное наименование организации.
"shortName": "ИП Иванов И. И.", #Сокращенное название организации.
"type": "BUSINESS", #Тип организации
"phone": "+7 (000) 000-00-00",
"active": true,
"chief": true,
"admin": false,
"hasRightOfSubstitution": true,
"hasApprovalTabAccess": false,
"name": "ИП Иванов И. И.",
"ogrn": "314119464291534",
"inn": "295929833306",
"addrs": [
{
"type": "OPS", #Тип адреса. Принимает значение "OPS".
"zipCode": "454902", #Почтовый индекс.
"countryId": "RUS", #Идентификатор страны.
"addressStr": "г Челябинск, ул Ленина", #Строка адреса.
"house": "17", #Дом.
"flat": "7", #Квартира.
"fiasCode": "111aee11-11db-11ff-11c1-1b11c11cd1b1", #Код ФИАС.
"region": "Челябинская", #Регион.
"city": "Челябинск", #Город.
"street": "Ленина" #Улица.
}
],
"liquidated": false
}
]",
"org_phone": "+7 (000) 000-00-00",
"RF_PASSPORT": "{ #Паспорт гражданина РФ
"stateFacts": [
"Identifiable"
],
"id": 143428,
"type": "RF_PASSPORT", #Тип документа. Допустимые значения: "RF_PASSPORT" - паспорт гражданина РФ. "FID_DOC" - документ иностранного гражданина, удостоверяющего личность на территории РФ, "FRGN_PASS" - заграничный паспорт гражданина РФ,
"vrfStu": "VERIFIED",
"series": "0001", #Серия. Для паспорта гражданина РФ в формате XXXX, для заграничного паспорта XX, для документа иностранного гражданина необязательный.
"number": "000000", #Номер. Для паспорта гражданина РФ в формате XXXXXX. Для заграничного паспорта гражданина РФ в формате XXXXXXX.
"latinLastName": "", #Фамилия (латиницей). Только для заграничного паспорта РФ.
"latinFirstName": "", #Имя (латиницей). Только для заграничного паспорта РФ.
"issueDate": "09.06.2020", #Дата выдачи паспорта.
"expireDate": Дата окончания срока действия документа. Только для заграничного паспорта РФ.
"issueId": "780047", #Номер подразделения, выдавшего паспорт.
"issuedBy": "ТП 47", #Наименование подразделения, выдавшего паспорт.
"eTag": "CB54D56457D509FEF806ACC882215587F43DF0A8"
}",
"org_inn": "295929833306", # ИНН организации.
"PLV": "{ #Адрес проживания
"stateFacts": [
"Identifiable"
],
"id": 81891,
"type": "PLV",
"addressStr": "г Челябинск, пр-кт Ленина",
"fiasCode": "111aee11-11db-11ff-11c1-1b11c11cd1b1",
"flat": "1",
"countryId": "RUS",
"house": "1",
"zipCode": "454079",
"city": "Челябинск",
"street": "Ленина",
"region": "Челябинская",
"eTag": "0F8976F0A65B5A179198DDE1FE20486B7C81FD0D"
}",
"org_phone": "+7 (900) 111-11-12", #Телефон организации
"org_inn": 9216747754, #ИНН организации
"org_hasApprovalTabAccess": "false",
"org_name": "ИП Иванов И. И.", #Наименование организации.
"snils": "000-000-000 00", #СНИЛС сотрудника.
"org_chief": "true" #Является ли сотрудник руководителем организации.
},
"PBL_BROKERED_IDENTITY_CONTEXT": {
"id": "1000466562",
"brokerUsername": "1000466562",
"brokerUserId": "esia.1000466562",
"token": {
"access_token": "eyJ2ZXIiOjEsInR5cCI6IkpXVCIsInNidCI6ImFjY2VzcyIsImFsZyI6IlJTMjU2In0.eyJuYmYiOjE2NjQ4OTY1NjMsInNjb3BlIjoiaWRfZG9jP29pZD0xMDAwNDY2NTYyIHVzcl9vcmc_b2lkPTEwMDA0NjY1NjIgZW1haWw_b2lkPTEwMDA0NjY1NjIgb3BlbmlkIHNuaWxzP29pZD0xMDAwNDY2NTYyIGNvbnRhY3RzP29pZD0xMDAwNDY2NTYyIGZ1bGxuYW1lP29pZD0xMDAwNDY2NTYyIiwiaXNzIjoiaHR0cDpcL1wvZXNpYS1wb3J0YWwxLnRlc3QuZ29zdXNsdWdpLnJ1XC8iLCJ1cm46ZXNpYTpzaWQiOiIyYzRmNGQ3MC02MWI2LTRkNWItOTZhNC0xNjdjODcwM2UxNjEiLCJ1cm46ZXNpYTpzYmpfaWQiOjEwMDA0NjY1NjIsImV4cCI6MTY2NDkwMDE2MywiaWF0IjoxNjY0ODk2NTYzLCJjbGllbnRfaWQiOiJFU1VHSV9HVF8wMSJ9.jMgnQTvLtKOfkFITSDifoHAY32AdK_M1KJOcnr-iwe9GaL3pIF_y_UHPeiKVNwg_7L7gafmaDYxny8734rXe84FzDpNbkzB2j5ppX8EBdZ-HXzQsQq7u7xlyRvTMg_bhxZpnpIdS5FrbUAxA2QuT8gPYWVTy4YBmg9O14gSJ1nw4lUkYYm74ZNae65AodxsI5hqVlbX0BZRjpIRHNPfYi-fiocUTIyjDkPrACZT0b6yEB0A2waXrCUVWXP9DuM1rhAGwAKL7yOf7KQhNpoe0U45TUkI8foxpaeUWLKmkHaPpGbeO392SswJ52gBY_X0gksT2NDlHOReAWHzklOGziA",
"expires_in": 3600,
"refresh_expires_in": 0,
"refresh_token": "ede5c828-9d48-41d9-b0e1-36ba2739d819",
"token_type": "Bearer",
"id_token": "eyJ2ZXIiOjAsInR5cCI6IkpXVCIsInNidCI6ImlkIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOiJFU1VHSV9HVF8wMSIsInN1YiI6MTAwMDQ2NjU2MiwibmJmIjoxNjY0ODk2NTYzLCJhbXIiOiJQV0QiLCJ1cm46ZXNpYTphbWQiOiJQV0QiLCJhdXRoX3RpbWUiOjE2NjQ4OTY1NTksImlzcyI6Imh0dHA6XC9cL2VzaWEtcG9ydGFsMS50ZXN0Lmdvc3VzbHVnaS5ydVwvIiwidXJuOmVzaWE6c2lkIjoiMmM0ZjRkNzAtNjFiNi00ZDViLTk2YTQtMTY3Yzg3MDNlMTYxIiwidXJuOmVzaWE6c2JqIjp7InVybjplc2lhOnNiajp0eXAiOiJQIiwidXJuOmVzaWE6c2JqOmlzX3RydSI6dHJ1ZSwidXJuOmVzaWE6c2JqOm9pZCI6MTAwMDQ2NjU2MiwidXJuOmVzaWE6c2JqOm5hbSI6Ik9JRC4xMDAwNDY2NTYyIn0sImV4cCI6MTY2NDkwNzM2MywiaWF0IjoxNjY0ODk2NTYzfQ.aVIZXj4nJoqQc5NMYqejo3mcbNF_XRg7hnRpJ2gLT3U6z3ujnEQ7kdduzIMj3Zr9bdZMZSHXKk19PbroLbl9cRfdZg7aF7AXg9dZsBrMu43nUqMoChULWjZ3XfqS06k6TVaXAiMOfxdr_P4F85McrsapS74ODkblN0lwU7uihlp0x5NOEKCH7OK-qSRGG4kwqnAsImdgXyAdC83XMox2XFAfsyM8LWXy0ftjzNdQWVwC_VP_wucCmku-wQuFccSJgU6EfLppFDgpaI5pESAc11cHaFdgY_bJXhp2fXWY9A4nXJz-bZTBG9hiWQzKBYcN3VvIXId3DvxJDvHDqjKS0A",
"not-before-policy": 0,
"accessTokenExpiration": 1664900163,
"state": "b2b8e0d4-6c20-4504-8977-e942b236b66a"
},
"identityProviderId": "esia",
"contextData": {
...
},
"email": "test@test.ru", #Почта
"firstName": "Иван", #Имя пользователя
"lastName": "Иванов", #Фамилия пользователя
"modelUsername": "1000466562"
},
"brokerUserId": 1000466562,
"session_start": 1664896563326,
"client_id": "SBER_PLATFORMAUTH", #Мнемоника
"scope": "fullname email snils id_doc contacts usr_org", #Области по умолчанию
"expires_in": 3600,
"authCode": "eyJ2ZXIiOjEsInR5cCI6IkpXVCIsInNidCI6ImF1dGhvcml6YXRpb25fY29kZSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJodHRwOlwvXC9lc2lhLXBvcnRhbDEudGVzdC5nb3N1c2x1Z2kucnVcLyIsInVybjplc2lhOmNsaWVudDpzdGF0ZSI6Ijc3OTJjYmUwLTFkNmQtNDM4NC05MmQzLTIyYWQ4NzdiY2VmYiIsImF1dGhfbXRoZCI6IlBXRCIsInVybjplc2lhOnNiaiI6eyJ1cm46ZXNpYTpzYmo6dHlwIjoiUCIsInVybjplc2lhOnNiajppc190cnUiOnRydWUsInVybjplc2lhOnNiajpvaWQiOjEwMDA0NjY1NjIsInVybjplc2lhOnNiajpuYW0iOiJPSUQuMTAwMDQ2NjU2MiIsInVybjplc2lhOnNiajplaWQiOjc1ODA3OTd9LCJwYXJhbXMiOnsicmVtb3RlX2lwIjoiODQuMjUyLjE0Ny4yMjYiLCJ1c2VyX2FnZW50IjoiTW96aWxsYVwvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEyXzVfMSkgQXBwbGVXZWJLaXRcLzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZVwvODguMC40MzI0LjQxIFlhQnJvd3NlclwvMjEuMi4wLjI0NTggWW93c2VyXC8yLjUgU2FmYXJpXC81MzcuMzYifSwiY2xpZW50X2lkIjoiRVNVR0lfR1RfMDEiLCJuYmYiOjE2NjQ4OTY1NTksInNjb3BlIjoiaWRfZG9jP29pZD0xMDAwNDY2NTYyIHVzcl9vcmc_b2lkPTEwMDA0NjY1NjIgZW1haWw_b2lkPTEwMDA0NjY1NjIgb3BlbmlkIHNuaWxzP29pZD0xMDAwNDY2NTYyIGNvbnRhY3RzP29pZD0xMDAwNDY2NTYyIGZ1bGxuYW1lP29pZD0xMDAwNDY2NTYyIiwiYXV0aF90aW1lIjoxNjY0ODk2NTU5LCJ1cm46ZXNpYTpzaWQiOiIyYzRmNGQ3MC02MWI2LTRkNWItOTZhNC0xNjdjODcwM2UxNjEiLCJzc29fc2VnbWVudCI6IiIsImV4cCI6MTY2NDg5Njc5OSwiaWF0IjoxNjY0ODk2NTU5fQ.f_quRQcMVeLopjbJ_sF-FIYuBFpax3trnBWEgacmW8eXc8qDBDNVr9fbBd2f28YAhYlg4knVsnVrBctgfZjWLjYvfDQ-rJ5svMPWACoCwJowXcFW-xGQVqrZJLAhskjpypJxQQzyw79OOfBK_gaX4c_hLb5qNHsK2BciUA1aPzUYT_Ht-ctugGBFiWmsceOBejDS4A3x-aXqrUYVTj6w5Dhtbov0ahXUIYi668ipCE32IudE7QAqBVmPmv5LxHSWk3B3PWvc9tEjkTavWhtm6hTK4nAKhiWnLBvZphUpcbwiIjiuTgDoZC3PoJoHGN_mYDJ1M27j3SaR1yvL_JneZw",
"profile": "ESIA",
"auth_code_time": 1664896559,
"identityProviderId": "esia",
"access_token": "eyJ2ZXIiOjEsInR5cCI6IkpXVCIsInNidCI6ImFjY2VzcyIsImFsZyI6IlJTMjU2In0.eyJuYmYiOjE2NjQ4OTY1NjMsInNjb3BlIjoiaWRfZG9jP29pZD0xMDAwNDY2NTYyIHVzcl9vcmc_b2lkPTEwMDA0NjY1NjIgZW1haWw_b2lkPTEwMDA0NjY1NjIgb3BlbmlkIHNuaWxzP29pZD0xMDAwNDY2NTYyIGNvbnRhY3RzP29pZD0xMDAwNDY2NTYyIGZ1bGxuYW1lP29pZD0xMDAwNDY2NTYyIiwiaXNzIjoiaHR0cDpcL1wvZXNpYS1wb3J0YWwxLnRlc3QuZ29zdXNsdWdpLnJ1XC8iLCJ1cm46ZXNpYTpzaWQiOiIyYzRmNGQ3MC02MWI2LTRkNWItOTZhNC0xNjdjODcwM2UxNjEiLCJ1cm46ZXNpYTpzYmpfaWQiOjEwMDA0NjY1NjIsImV4cCI6MTY2NDkwMDE2MywiaWF0IjoxNjY0ODk2NTYzLCJjbGllbnRfaWQiOiJFU1VHSV9HVF8wMSJ9.jMgnQTvLtKOfkFITSDifoHAY32AdK_M1KJOcnr-iwe9GaL3pIF_y_UHPeiKVNwg_7L7gafmaDYxny8734rXe84FzDpNbkzB2j5ppX8EBdZ-HXzQsQq7u7xlyRvTMg_bhxZpnpIdS5FrbUAxA2QuT8gPYWVTy4YBmg9O14gSJ1nw4lUkYYm74ZNae65AodxsI5hqVlbX0BZRjpIRHNPfYi-fiocUTIyjDkPrACZT0b6yEB0A2waXrCUVWXP9DuM1rhAGwAKL7yOf7KQhNpoe0U45TUkI8foxpaeUWLKmkHaPpGbeO392SswJ52gBY_X0gksT2NDlHOReAWHzklOGziA",
"refresh_token": "ede5c828-9d48-41d9-b0e1-36ba2739d819",
"esia_id": 1000466562,
"esia_base_url": "https://esia-portal1.test.gosuslugi.ru", #Сервер ЕСИА
"alg_id": "PKCS7-RSA256", #Алгоритм шифрования: Доступные значения: "PKCS7-RSA256", "GOST3411WITHECGOST3410-2012-256","GOST3411WITHECGOST3410-2012-512","GOST-ONLINE"
"SESSION_NOTES_SET": "ok",
"redirect_uri": "http://localhost:8080/realms/test/broker/esia/endpoint" #URL на который ЕСИА вернет данные
}
Роли передаются массивом:
"roles": [
"ESUGI_GT_01:ESUGI_GT_SIGNATURE",
"ESUGI_GT_01:ESUGI_GT_BASE",
"ESUGI_GT_01:ESUGI_GT_DELIVERY_CONFIRM"
],
Формат роли следующий: мнемоника системы–владельца группы (например, ESUGI_GT_01) : мнемоника группы (например, ESUGI_GT_SIGNATURE).
Данные полученные через IDP ЕСИА можно также использовать при разработке JavaScript mapper.
Атрибуты пользователя#
Следующие атрибуты пользователя сохраняются в keycloak:
Поле |
Атрибут |
|---|---|
Дата рождения |
birthDate |
Пол |
gender |
ИНН физического лица |
inn |
Локализация |
locale |
Отчество |
middleName |
Мобильный номер |
mobile |
ИНН организации |
org_inn |
ОГРН организации |
org_ogrn |
Идентификатор организации (oid) (значение поля organization) |
org_oid |
Идентификатор филиала пользователя |
org_branchOid |
КПП филиала пользователя |
org_branchKpp |
Краткое наименование организации |
org_ShortName |
Полное наименование организации |
org_FullName |
СНИЛС физического лица |
snils |
Хранение сертификата портала ЕСИА |
trusted |
Метод аутентификации, выбранный пользователем в ESIA |
esia_auth_mthd |
Указанный пользователем тип авторизации через ЕСИА (от ФЛ, ИП, ЮЛ, ОГВ, Филиал ЮЛ и Филиал ОГВ) |
esia_auth_type |
Выбираемый пользователем тип входа - "esia" |
login_type |
Метод идентификации, выбранный пользователем в ЕСИА (esia_auth_mthd), может принимать одно из значений:
Описание |
Принимаемое значение |
|---|---|
Электронная подпись |
DS |
Пароль |
PWD |
QR-код |
QR |
Биометрия |
EBS |
делегирование |
DLG |
мобильное приложение «Госуслуги» по логину |
MP |
мобильное приложение «Госуслуги» по пин-коду |
MPRFN |
мобильное приложение |
MP |
Алгоритм заполнения поля esia_auth_type:
Условие расчета |
Значение в поле |
|
|---|---|---|
ФИЗ Лицо |
Блок organization принимает следующее значение: "organization": 0 |
PERSON |
ИП |
Поле org_type принимает значение "BUSINESS" |
BUSINESS |
сотрудник ЮЛ |
Поле org_type принимает значение "LEGAL" и в scope:esia нет следующих атрибутов: |
LEGAL |
сотрудник филиала ЮЛ |
Поле org_type принимает значение "AGENCY" и в scope:esia присутствуют следующие атрибуты: |
BRANCH_LEGAL |
сотрудник ОГВ |
Поле org_type принимает значение "AGENCY" и в scope:esia присутствуют следующие атрибуты: |
AGENCY |
сотрудник филиала ОГВ |
Поле org_type принимает значение "LEGAL" и в scope:esia присутствуют следующие атрибуты: |
BRANCH_AGENCY |
Атрибуты пользователя обновляются в полном объеме при каждой аутентификации.
Проверка получения информации о пользователе#
Для получения информации о пользователе, полученной из ЕСИА, необходимо чтобы было настроено сопоставление "ESIA Info Mapper" (см. п.7). Выключить флаги "Добавить в токен ID" и "Добавить в токен доступа". Включить флаг "Добавить в информацию о пользователе".

Проверить работу mapper и посмотреть значения атрибутов можно следующими вызовами:
Получить токен доступа
Access-токен, необходимый для вызова userinfo на тестовых средах, можно запросить с Platform V IAM Proxy по endpoints https://{proxy_ip_port}/jwt/?access=1 (пример - https://platform-st-alt-gt.solution.gt/jwt/?access=1)
Выполнить GET запрос
https://{keycloak_ip}:{port}/realms/{realm_name}/protocol/openid-connect/userinfo.
Пример вызова через curl:
token='eyJhbGciOiJSUzI1NiIsInR5cCIgO...'
curl -k https://platformauth-st-alt-gt.solution.gt:8444/auth/realms/PlatformAuth/protocol/openid-connect/userinfo -H "Authorization: Bearer $token"
Настройка при необходимости работать через HTTP-прокси (настройка HTTP-клиента Keycloak)#
Данное действие выполняется только если с сервера не имеется прямого доступа в Интернет, и выход в Интернет производится с использованием HTTP-proxy (например с использованием сервера 3Proxy и т.п.).
Открыть файл /opt/keycloak/standalone/configuration/standalone-ha.xml, найти в нем секцию <spi name="connectionsHttpClient"> и задать следующее:
<spi name="connectionsHttpClient">
<provider name="default" enabled="true">
<properties>
<property
name="proxy-mappings"
value="[".*\\.gosuslugi\\.ru;http://userproxy:proxySecretPass@{ IP_ADRESS_EXTERNAL }:3333"]"/>
</properties>
</provider>
</spi>
Строка http://userproxy:proxySecretPass@{ IP_ADRESS_EXTERNAL }:3333 заменяется на соответствующую конкретному стенду и параметрам прокси.
Если интеграция не заработала#
В подавляющем большинстве случаев детали ошибок можно увидеть в логах сервера приложений (/opt/keycloak/standalone/log/server.log) .
Если проблемы не видно при стандартном уровне логирования, то его можно повысить выставив уровень DEBUG.
Для сред контейнеризации в переменных окружения выставить следующие значения:
QUARKUS_LOG_CATEGORY__SBER_PLATFORM_IAM_KEYCLOAK_SE_KEYCLOAK_ESIA__LEVEL=DEBUG или в quarkus properties
quarkus.log.category."sber.platform.iam.keycloak.se.keycloak.esia".level=DEBUG
На сервере для logger(s) root, изменив /opt/keycloak/standalone/configuration/standalone-ha.xml.
<subsystem xmlns="urn:jboss:domain:logging:6.0">
...
<root-logger>
<level name="DEBUG"/>
...