Подключение 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 для ПРОМ.

Настройка хранилища ключей#

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

Генерация сертификатов описана в Руководстве по безопасности -> Управление ключами и сертификатами -> Генерация сертификатов (см. пункты ГОСТ 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.

На рисунке ниже изображен интерфейс добавления хранилища ключей. ESIA_IDP На рисунке ниже изображен интерфейс подключения/настройки хранилища ключей. ESIA_IDP

Разместите хранилище ключей на сервере и укажите к нему путь в следующем параметре:

  • 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.

Заполнить параметры и сохранить:

При нажатии на кнопку "Сохранить" будет проверен доступ к ключу. В случае ошибки сохранение не произойдет, нужно будет исправить ошибку и попробовать сохранить еще раз.

Прописать сертификат на техническом портале ЕСИА#

Необходимо прописать сертификат, полученный в разделе "Генерация", на техническом портале ЕСИА. Для этого требуется пройти авторизацию под пользователем 000-000-600 06 (пароль 11111111), найти мнемонику SBER_PLATFORMAUTH и нажать на "…".

На рисунке ниже изображено главное окно технического портала ЕСИА ESIA_IDP

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

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

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

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

Добавление сертификата портала ЕСИА в доверенные#

При обращении по 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) аутентификации для первого входа через ЕСИА#

  • Во вкладке "Аутентификация" нажать кнопку создать.

  • Сформировать верхнеуровневую форму(см. рисунок ниже). ESIA_IDP

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

  • Заполнить новый поток "ЕСИА сценарий при первом входе" аутентификаторами, нажимая кнопку "Добавить исполнение".

  • Добавить два поставщика:

    • Create User If Unique.

    • Automatically Set Existing User.

На рисунках ниже изображена форма создания исполнения аутентификатора. ESIA_IDP

ESIA_IDP

ESIA_IDP

В итоге должен получится такой вид flow:

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

Добавить поток (flow), выполняемый после аутентификации#

  • Во вкладке "Аутентификация" нажать кнопку создать.

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

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

  • Заполнить новый поток "ЕСИА сценарий при первом входе" аутентификаторами, нажимая кнопку "Добавить исполнение".

  • Порядок аутентификаторов должен быть строго следующий:

    • Get ESIA User Info.

    • ESIA Organization List.

    • ESIA Organization Choice.

    • Get ESIA User Roles.

  • У всех аутентификаторов должен стоять чекбокс "REQUIRED".

    ESIA_IDP (интерфейс выбора действий для настройки аутентификатора)

  • Задать параметры конфигурации для каждого:

    • Для Get ESIA User Info ESIA_IDP (интерфейс настройки конфигурации аутентификатора Get ESIA User Info)

    • Для ESIA Organization List ESIA_IDP (интерфейс настройки конфигурации аутентификатора ESIA Organization List)

    • Для ESIA Organization Choice ESIA_IDP (интерфейс настройки конфигурации аутентификатора ESIA Organization Choice)

    • Для Get ESIA User Roles ESIA_IDP (интерфейс настройки конфигурации аутентификатора Get ESIA User Roles) При конфигурировании сценария предусмотрено включение возможности получить роли в виде строки.

    • При отключенном флаге "Получение ролей в виде строки" роли приходят в виде массива.

    В итоге должен получится такой вид flow: ESIA_IDP (_интерфейс настройки сценария аутентификации ЕСИА Выбор Организации)

Необходимо учитывать, что для получения соответствующих данных необходимо иметь доступ к соответствующим 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.

    ESIA_IDP

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

    ESIA_IDP

Указать параметры:

  • Мнемоника для 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).

  • Остальные флаги установить как на скриншоте ниже:

ESIA_IDP

Проверка аутентификации в ЕСИА#

  • Перейти на стенд, где установлена ЕСИА ESIA_IDP

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

Войти на тестовый портал ЕСИА можно под тестовым пользователем - СНИЛС 000-000-600 05.

ESIA_IDP

ESIA_IDP

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

ESIA_IDP

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

Настройка отдаваемой информации#

Настройка отдаваемой информации производится в основном через настройку сопоставлений (mapper) в scope и в клиентах.

  • Выполнить вход в Keycloak.

  • Открыть клиента (например, PlatformAuth-Proxy), и перейти на вкладку Сопоставления.

    ESIA_IDP

Добавление в id/access токен значение id пользователя ЕСИА

Нажать в сопоставлениях "Создать", и выбирать тип сопоставления "User Session Note".

Заполнить поля следующими значениями:

  • Имя: esia_id.

  • Заметка сессии пользователя: brokerUserId.

  • Имя переменной в токене: esia_id.

  • Тип переменной JSON: String.

  • Добавить в токен ID: вкл.

  • Добавить в токен доступа: вкл.

  • IncludeInAccessTokenResponse.lable: выкл. И нажимаем "Сохранить".

    ESIA_IDP

Добавление в userinfo информации о пользователе из ЕСИА

Нажать в сопоставлениях "Создать", и выбираем тип сопоставления "ESIA Info Mapper".

Заполнить поля следующими значениями:

  • Имя: Esia_info.

  • Имя переменной в токене: esia.

Остальные параметры как на скриншоте. И нажимаем "Сохранить".

ESIA_IDP

Информация о пользователе из ЕСИА представляет собой 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 нет следующих атрибутов:
- org_branchOid;
- org_branchKpp;
- org_branсhName

LEGAL

сотрудник филиала ЮЛ

Поле org_type принимает значение "AGENCY" и в scope:esia присутствуют следующие атрибуты:
-org_branchOid;
-org_branchKpp;
-org_branсhName

BRANCH_LEGAL

сотрудник ОГВ

Поле org_type принимает значение "AGENCY" и в scope:esia присутствуют следующие атрибуты:
-org_branchOid;
-org_branchKpp;
-org_branсhName

AGENCY

сотрудник филиала ОГВ

Поле org_type принимает значение "LEGAL" и в scope:esia присутствуют следующие атрибуты:
-org_branchOid;
-org_branchKpp;
-org_branсhName

BRANCH_AGENCY

Атрибуты пользователя обновляются в полном объеме при каждой аутентификации.

Проверка получения информации о пользователе#

Для получения информации о пользователе, полученной из ЕСИА, необходимо чтобы было настроено сопоставление "ESIA Info Mapper" (см. п.7). Выключить флаги "Добавить в токен ID" и "Добавить в токен доступа". Включить флаг "Добавить в информацию о пользователе".

ESIA_IDP

Проверить работу mapper и посмотреть значения атрибутов можно следующими вызовами:

  1. Получить токен доступа

Access-токен, необходимый для вызова userinfo на тестовых средах, можно запросить с Platform V IAM Proxy по endpoints https://{proxy_ip_port}/jwt/?access=1 (пример - https://platform-st-alt-gt.solution.gt/jwt/?access=1)

  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"/>
...

**Актуальную информацию по ЕСИА можно найти на портале Минцифры.#