Аутентификация с использованием ЕСИА
RooX UIDM поддерживает аутентификацию с использованием внешней системы хранения учётных данных пользователей — Единой системы идентификации и аутентификации (ЕСИА).
ЕСИА является федеральной государственной информационной системой, в которой содержатся персональные данные граждан Российской Федерации, а также иные сведения (о статусе индивидуального предпринимателя, о юридических лицах и др.). ЕСИА используется в первую очередь для доступа граждан к сервисам государственных услуг и иных взаимодействий в электронной форме граждан с органами государственной власти.
RooX UIDM позволяет пользователю с учётной записью в ЕСИА получить доступ к защищаемому ресурсу при выполнении пользователем аутентификации в ЕСИА.
Использование в RooX UIDM идентификации и аутентификации при помощи ЕСИА:
-
освобождает пользователя от необходимости хранить логин и пароль от учётной записи RooX UIDM, достаточно знать логин и пароль от учётной записи ЕСИА. Существует возможность беспарольной аутентификации пользователей (аутентификация только с использованием ЕСИА, когда учётная запись RooX UIDM не содержит установленного пароля);
-
сохраняет за пользователем возможность аутентифицироваться в RooX UIDM с использованием других средств (логин и пароль, сертификат электронной подписи и других);
-
обеспечивает заказчика достоверными сведениями о пользователе: ФИО, паспортными данными, СНИЛС (в случае, если учётная запись пользователя обладает статусом «подтверждённая»), и роли такого пользователя в юридических лицах;
-
позволяет назначать пользователю полномочия в RooX UIDM в соответствии с его ролью в юридическом лице (в соответствии со сведениями ЕСИА).
Степень достоверности сведений о пользователе, содержащихся в учётной записи ЕСИА, выражается в статусе такой учётной записи:
упрощённая (непроверенная) учётная запись |
минимальный набор сведений о пользователе |
---|---|
стандартная учётная запись |
данные о пользователе сверены с государственными информационными ресурсами |
подтверждённая учётная запись |
данные о пользователе сверены с государственными информационными ресурсами, а личность пользователя подтверждена одним из доступных способов подтверждения |
Достоверность сведений подтверждённой учётной записи ЕСИА обеспечивается проверкой сведений, предоставленных пользователем, органами государственной власти.
RooX UIDM не содержит заранее установленных требований к статусу учётной записи пользователя в ЕСИА, с использованием которой будет производиться аутентификация в RooX UIDM. Ограничения статуса учётной записи пользователя, аутентифицирующегося с использованием ЕСИА, устанавливаются в соответствии с требованиями заказчика.
Важно
|
Токены доступа, выпускаемые RooX UIDM, содержат в себе свойство (клейм) На основании этого уровня доверия защищаемые системы могут принимать решения о разграничении доступа пользователей к своим данным. |
Нормативные документы Единой системы идентификации и аутентификации
Нормативные документы ЕСИА размещены на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации в разделе «Документы» по направлению Единая система идентификации и аутентификации (ЕСИА).
Состав наборов данных, предоставляемых ЕСИА в соответствии с заданными областями доступа (scope), содержится в актуальной версии Методических рекомендаций по использованию Единой системы идентификации и аутентификации, размещённых на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации в разделе «Документы» по направлению Единая система идентификации и аутентификации (ЕСИА).
Требования к безопасности при использовании аутентификации с использованием ЕСИА
Корректность обработки статуса учётной записи ЕСИА
Учётная запись пользователя в ЕСИА может находиться в одном из трёх статусов, соответствующих уровню доверия к содержащимся в ней данным.
Необходимо убедиться, что учётные записи ЕСИА с различным статусом логически корректно обрабатываются защищаемой системой.
Использование сертификата электронной подписи для подписания запросов к ЕСИА
Запросы экземпляра RooX UIDM к ЕСИА должны быть подписаны закрытым ключом сертификата электронной подписи. Статус сертификата электронной подписи проверяется ЕСИА. Сертификаты, выпущенные неаккредитованными удостоверяющими центрами (самоподписанные), не могут быть использованы для подписания запросов к ЕСИА.
Владельцу защищаемой системы необходимо обеспечить выпуск сертификата электронной подписи юридического лица.
Соблюдение требований по защите персональных данных
Данные, полученные из ЕСИА, являются персональными.
Владелец защищаемой системы должен убедиться, что выполняются требования к хранению персональных данных, в том числе возможность отзыва согласия пользователя на обработку персональных данных, а также другие положения федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных».
Контроль доступа бывших сотрудников организации
В случае использования модели доступа с организациями необходимо убедиться, что защищаемая система корректно отслеживает и обрабатывает случаи изменения в ЕСИА ролей и отношений между организациями и их сотрудниками (например, бывший генеральный директор не должен иметь возможности подавать платежные поручения).
Сценарии аутентификации с использованием ЕСИА
-
Пользователь обращается к защищаемому ресурсу.
-
Пользователь выполняет переход в ЕСИА для аутентификации.
-
Сервис аутентификации ЕСИА аутентифицирует пользователя.
-
Сервис аутентификации ЕСИА получает согласие пользователя на предоставление RooX UIDM его данных.
-
Сервис аутентификации ЕСИА перенаправляет пользователя обратно в RooX UIDM и передает авторизационный код.
-
RooX UIDM формирует запрос с использованием авторизационного кода на получение токена идентификации.
-
RooX UIDM получает ответ, содержащий необходимый токен идентификации.
-
RooX UIDM проводит проверку токена идентификации.
-
При успешной проверке токена идентификации пользователь считается аутентифицированным.
-
Пользователь обращается к защищаемому ресурсу.
-
Пользователю отображается экран аутентификации с кнопкой «Войти при помощи ЕСИА».
-
Пользователь нажимает кнопку и переходит на сайт ЕСИА к экрану аутентификации в ЕСИА.
-
Пользователь успешно выполняет аутентификацию в ЕСИА.
-
Пользователь автоматически перенаправляется и получает доступ к защищаемому ресурсу.
Модели данных
Сведения о пользователе, загруженные RooX UIDM из ЕСИА, хранятся в виде строк
формата JSON в полях profile
и userinfo
таблицы external_user
БД Roox
UIDM.
Внешние привязки пользователя хранятся в таблице partner_mappings
БД RooX
UIDM.
Внешние привязки пользователя к ЕСИА могут быть получены с использованием API управления привязками.
Модель данных PartnerMapping
Атрибут | Тип данных | Описание | Дополнительная информация |
---|---|---|---|
|
Данные аутентификации |
Инициализируется при создании экземпляра класса: |
|
|
String |
|
|
|
Date |
Дата и время создания привязки |
|
|
String |
Идентификатор пользователя в RooX UIDM |
|
|
String |
Идентификатор внешнего пользователя |
|
|
Блок информации о пользователе на стороне ЕСИА или социальной сети |
Инициализируется при создании экземпляра класса: |
|
|
String |
Уникальный идентификатор привязки. Используется, например, для удаления |
|
|
boolean |
Признак, разрешил ли пользователь сохранять социальные данные |
Инициализируется при создании экземпляра класса: |
|
String |
Идентификатор системы, в которой создана привязка. Для ЕСИА и социальных сетей содержит условное имя |
|
|
String |
Пространство пользователей |
|
|
PartnerType |
Тип привязки. Всегда содержит |
Значения: |
Модель данных ExternalUser
Атрибут | Тип данных | Описание | Дополнительная информация |
---|---|---|---|
|
String |
Ссылка на уменьшенный аватар пользователя |
|
|
String |
Ссылка на аватар пользователя |
|
|
String |
Адрес электронной почты |
|
|
String |
Имя пользователя в ЕСИА или социальной сети |
|
|
String |
Полное имя пользователя в ЕСИА или социальной сети |
|
|
String |
Фамилия пользователя в ЕСИА или социальной сети |
|
|
String |
Отчество пользователя в ЕСИА или социальной сети |
|
|
String |
Номер телефона |
Передается в формате +7(XXX)XXXXXXX, где X — цифра |
|
String |
Данные профиля |
Записанный в строку JSON-объект. В случае ЕСИА используется модель EsiaPersonProfileDto |
|
String |
Список друзей пользователя в социальной сети |
|
|
String |
Идентификатор пользователя в ЕСИА или социальной сети |
|
|
String |
Информация о пользователе |
Записанный в строку JSON-объект. В случае ЕСИА используется модель UserDataDto |
Модель данных EsiaPersonProfileDto
Атрибут | Тип данных | Описание |
---|---|---|
|
String |
10-я копия ИНН |
|
Collection<UserOrgDto> |
Сведения об организациях из профиля ЕСИА |
|
String |
10-я копия СНИЛС |
Модель данных UserOrgDto
Атрибут | Тип данных | Описание | Дополнительная информация |
---|---|---|---|
|
Boolean |
Признак администратора |
|
|
Boolean |
Признак руководителя |
|
|
String |
Номер ОГРН организации |
|
|
Long |
Идентификатор |
Внутренний идентификатор объекта, в том числе пользователя |
|
String |
Краткое наименование организации (сокращение/аббревиатура) |
Модель данных Auth
Атрибут | Тип данных | Описание | Дополнительная информация |
---|---|---|---|
|
String |
Токен авторизации |
Выданный токен доступа |
|
String |
Идентификатор клиента |
|
|
int |
Количество отправок одноразового пароля |
|
|
int |
Количество попыток ввода одноразового пароля |
|
|
Date |
Дата разблокировки отправки одноразовых кодов |
|
|
String |
Обновление токена |
Выданный токен обновления доступа |
|
String |
Список разрешенных scope для использования от имени пользователя, возможные значения задаются конфигурацией |
scope (в формате JSON Array) |
|
boolean |
Признак подключения второго фактора аутентификации |
Включен (да / нет) |
|
long |
Модель данных UserDataDto
Атрибут | Тип данных | Описание |
---|---|---|
|
Перечень адресов |
|
|
LocalDate |
Дата рождения ( |
|
String |
Место рождения |
|
String |
Гражданство |
|
Перечень контактов |
|
|
Перечень документов, удостоверяющих личность |
|
|
String |
Имя |
|
Gender |
Пол ( |
|
String |
ИНН (номер ИНН физического лица) |
|
String |
Фамилия |
|
String |
Отчество |
|
String |
СНИЛС (номер страхового свидетельства) |
Модель данных ContactsDto
Атрибут | Тип данных | Описание |
---|---|---|
|
Long |
Идентификатор контакта |
|
Тип контакта |
|
|
String |
Значение |
|
String |
Статус проверки |
Модель данных ContactType
enum | Тип контакта |
---|---|
|
Не определено |
|
Мобильный телефон |
|
Городской телефон |
|
Электронная почта |
Модель данных AddressesDto
Атрибут | Тип данных | Описание |
---|---|---|
|
String |
Улица на доп. территории |
|
String |
Доп. территория |
|
String |
Наименование улицы |
|
String |
Область |
|
String |
Номер строения |
|
String |
Город |
|
String |
Идентификатор страны |
|
String |
Внутригородской район |
|
String |
Код ФИАС |
|
String |
Номер квартиры |
|
String |
Корпус |
|
String |
Номер дома |
|
Long |
Идентификатор |
|
String |
Регион |
|
String |
Посёлок |
|
String |
Улица |
|
Тип адреса |
|
|
String |
Значение |
|
String |
Статус проверки |
|
String |
Почтовый индекс |
Модель данных AddressType
Тип данных | Значения | Описание |
---|---|---|
enum |
Тип адреса |
|
|
Адрес места проживания |
|
|
Адрес временной регистрации |
|
|
Адрес постоянной регистрации |
|
|
Отсутствует |
Модель данных DocumentDto
Атрибут | Тип данных | Описание |
---|---|---|
|
LocalDate |
Срок действия документа |
|
String |
Имя |
|
Long |
Идентификатор |
|
LocalDate |
Дата выдачи |
|
String |
Код подразделения |
|
String |
Кем выдан (наименование организации) |
|
String |
Фамилия |
|
String |
Наименование медицинской организации |
|
String |
Номер документа |
|
String |
Серия |
|
Тип документа |
|
|
String |
Единый номер полиса (ЕНП) |
|
String |
Статус проверки |
Модель данных DocumentType
Тип данных | Значения | Описание |
---|---|---|
enum |
Тип документа |
|
|
не определено |
|
|
Паспорт гражданина РФ |
|
|
Документ иностранного гражданина |
|
|
Водительское удостоверение |
|
|
Военный билет |
|
|
Заграничный паспорт |
|
|
полис ОМС |
|
|
Свидетельство о рождении (Россия) |
|
|
Свидетельство о рождении (другая страна) |
|
|
Свидетельство о рождении (СССР) |
Настройка функциональности аутентификации с использованием ЕСИА
Интеграция с ЕСИА выполняется с использованием протоколов OAuth2 и OIDC (OpenID Connect), что делает интеграцию с ЕСИА аналогичной с социальными сетями, использующими эти же протоколы аутентификации и авторизации.
Требования к каналам связи
Для работы функциональности аутентификации с использованием ЕСИА необходимо
обеспечить доступность прохождения пакетов в порт 443
до серверов с именами
https://esia-portal1.test.gosuslugi.ru
(тестовый контур)
и https://esia.gosuslugi.ru
(продуктовый контур).
Компоненты, обеспечивающие функциональность аутентификации с использованием ЕСИА
-
sso-server
(основной сервис аутентификации: выполняет аутентификацию, предоставляет API для аутентификации, самообслуживания и администрирования) -
federation-webapi
(сервис данных федеративной аутентификации, хранит привязки пользователя к сторонним сервисам и предоставляет API к ним)
Требования к содержимому баз данных для работоспособности функциональности аутентификации с использованием ЕСИА
Для работоспособности функциональности аутентификации с использованием ЕСИА
в базе данных сервиса federation-webapi
в таблице social_partner
должна
существовать запись со значениями, указанными в таблице Значения полей записи таблицы social_partner
базы данных сервиса federation-webapi
.
Поле | Значение |
---|---|
|
|
|
Идентификатор экземпляра RooX UIDM, присваиваемый в ходе регистрации его подключения к ЕСИА |
|
|
|
|
|
|
|
Разделенный пробелами перечень областей доступа (scope) ЕСИА из списка предоставляемых ЕСИА наборов данных о пользователе (см. Методические указания по использованию Единой системы идентификации и аутентификации). Области доступа определяют сведения, возвращаемые ЕСИА (при наличии разрешения RooX UIDM на доступ к ним) |
|
|
|
Адрес ЕСИА, на который выполняется переход пользователя для аутентификации |
Настройки RooX UIDM, влияющие на функциональность аутентификации с использованием ЕСИА
com.rooxteam.federation.esia.app.id
-
- Описание
-
Идентификатор экземпляра UIDM, выдаваемый при его регистрации в ЕСИА (внутренний идентификатор огранизации в ЕСИА). Значение этой настройки должно совпадать со значением настройки
com.rooxteam.sso.esia.clientId
com.rooxteam.sso.esia.users.scopes
-
- Описание
-
Список разделённых пробелом областей действия (областей доступа, scope), сведения из которых запрашиваются в ЕСИА. ЕСИА использует области действия в качестве указателей на запрашиваемые данные
- Возможные значения
-
Список предоставляемых ЕСИА областей действия (областей доступа, scope) содержится в Методических рекомендациях по использованию Единой системы идентификации и аутентификации, размещённых на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации в разделе в разделе «Документы» по направлению Единая система идентификации и аутентификации (ЕСИА)
com.rooxteam.sso.esia.oauth2.authorization.request.url
-
- Описание
-
URL ЕСИА для направления кода аутентификации и обмена его на токен доступа (для авторизации по протоколу OAuth2)
com.rooxteam.sso.esia.clientId
-
- Описание
-
Идентификатор экземпляра UIDM, выдаваемый при его регистрации в ЕСИА (внутренний идентификатор огранизации в ЕСИА). Значение этой настройки должно совпадать со значением настройки
com.rooxteam.federation.esia.app.id
com.rooxteam.sso.esia.cert
-
- Описание
-
Сертификат электронной подписи, используемый для подписания запросов к ЕСИА. Такой сертификат предварительно регистрируется в ЕСИА и привязывается к учётной записи системы-клиента в ЕСИА
com.rooxteam.sso.esia.private.key
-
- Описание
-
Закрытый (приватный, непубличный) ключ ключевой пары сертификата электронной подписи, используемого для подписи запросов к ЕСИА
com.rooxteam.sso.esia.secretProvider
-
- Описание
-
Отсутствует
Фронтэнд-реализация аутентификации с использованием ЕСИА
Для начала сценария аутентификации или создания учётной записи пользователя
RooX UIDM с помощью учетной записи ЕСИА необходимо обратиться к API RooX UIDM
с запросом токена доступа. Из полученного
ответа необходимо извлечь URL-адрес (поле view.esiaRequestUri
), по
которому пользователь должен будет перейти на сайт ЕСИА для аутентификации.
Подсказка
|
В составе ответа на запрос токена доступа RooX UIDM в поле esiaRequestUri
возвращает реальный адрес тестового или продуктового контура ЕСИА. При
локальной разработке клиентского приложения может потребоваться подмена
адреса ЕСИА из поля esiaRedirectUri на адрес локальной «заглушки».
|
Для открытия модального окна ЕСИА можно использовать следующую функцию:
window.open(esiaRequestUri, 'Data', 'fullscreen=yes');
На странице начала сценария аутентификации необходимо присвоить переменной
window.esiaAuth
функцию (callback), которая будет вызывана после успешной
авторизации пользователя в ЕСИА:
const encodeSocialParams = (params) => {
let result = '';
for (let param in params) {
if (params.hasOwnProperty(param)) {
result += ${param}=${params[param]}&;
}
}
result = result.substr(0, result.length - 1);
return encodeURIComponent(result);
};
const EsiaAuth = (code) => {
const socialData = Base64.encode(encodeSocialParams({ code }), false, true);
// Далее происходит вызов асинхронной функции, которой передаётся объект
// `socialData` в RooX UIDM вместе с `_eventId: 'esia'` для перехода на следующий
// шаг сценария
};
Сценарии аутентификации с использованием ЕСИА
Важно
|
Пользователь, выполняющий аутентификацию с использованием ЕСИА, должен обладать учётной записью в RooX UIDM. |
Сценарии аутентификации с использованием ЕСИА предполагают, что у пользователя существует учётная запись в RooX UIDM, к которой выполняется привязка.
Создание учётной записи RooX UIDM (регистрации) в ходе сценария аутентификации с использованием ЕСИА не предусмотрено.
Во время выполнения сценария при направлении запросов в каждом последующем
шаге сценария необходимо передавать контекст предыдущего шага — параметр
execution
.
Сценарий аутентификации в RooX UIDM с использованием ЕСИА
Начало сценария аутентификации
POST https://example.com/sso/oauth2/access_token
client_id=mlk&
client_secret=password&
realm=%2Fcustomer&
grant_type=urn%3Aroox%3Aparams%3Aoauth%3Agrant-type%3Am2m&
service=dispatcher
<client_id>
-
Идентификатор приложения-клиента. Возможные значения зависят от конфигурации.
<client_secret>
-
Пароль приложения-клиента. Возможные значения зависят от конфигурации.
<realm>
-
Группа пользователей RooX UIDM. Всегда используется значение
%2Fcustomer
, которое является uri-encoded значением/customer
.
<grant_type>
-
Способ авторизации пользователя:
urn:roox:params:oauth:grant-type:m2m
-
для сценариев получения токена доступа, токена обновления доступа, токена автоматического входа.
client_credentials
-
для сценария получения приложением-клиентом системного токена.
<service>
-
Используемый сервис (цепочка аутентификации).
{
"execution": "<…>",
"form": {
"errors": [],
"fields": {
"password": {
"constraints": [
{
"attributes": {
"max": 1024,
"min": 1
},
"name": "Size"
},
{
"name": "NotNull"
}
]
},
"username": {
"constraints": [
{
"attributes": {
"enabledConfigurationKey": "com.rooxteam.sso.webflow.realm.{realm}.simple_login_form.login.pattern_enabled",
"max": 10,
"min": 10,
"skip": "(^[^9]+)|([^0-9])"
},
"name": "ConfigurableFilteredSize"
},
{
"name": "NotNull"
}
]
}
},
"name": "loginForm"
},
"serverUrl": "https://example.com:443/sso/auth/login-widget-router",
"step": "auth_form",
"view": {
"autologin": "skipped",
"esiaAppId": "771F01",
"esiaRedirectUri": "/esia_callback.jsp",
"esiaRequestScopesAsArray": [
"http://esia.gosuslugi.ru/usr_inf http://esia.gosuslugi.ru/usr_avt"
],
"esiaRequestUri": "https://esia-portal1.test.gosuslugi.ru/aas/oauth2/ac?state=17e66864-9202-4758-9f96-bf0c212cbbda&client_id=OPG&response_type=code&access_type=offline&scope=http%3A%2F%2Fesia.gosuslugi.ru%2Fusr_inf×tamp=2022.10.09+22%3A36%3A44+%2B0000&redirect_uri=https%3A%2F%2Fexample.com%3A443%2Fsso%2Fesia_callback.jsp&client_secret=<…>&display=popup",
"isBlocked": false,
"ssoUrl": "https://example.com:443/sso",
}
}
Если пользователь нажимает кнопку Вход с помощью ЕСИА, необходимо выполнить
переход на адрес, переданный в поле esiaRequestUri
.
После аутентификации пользователя в учётной записи ЕСИА ЕСИА возвращает пользователю код авторизации, который должен быть передан RooX UIDM.
Запрос токена доступа после выполнения аутентификации пользователя в ЕСИА
POST https://example.com/sso/oauth2/access_token
client_id=mlk&
client_secret=password&
realm=%2fcustomer&
grant_type=urn%3aroox%3aparams%3aoauth%3agrant-type%3am2m&
service=esia&
_eventid=esia&
execution=<…>&
socialdata=<…>
<client_id>
-
Идентификатор приложения-клиента. Возможные значения зависят от конфигурации.
<client_secret>
-
Пароль приложения-клиента. Возможные значения зависят от конфигурации.
<realm>
-
Группа пользователей RooX UIDM. Всегда используется значение
%2Fcustomer
, которое является uri-encoded значением/customer
.
<grant_type>
-
Способ авторизации пользователя:
urn:roox:params:oauth:grant-type:m2m
-
для сценариев получения токена доступа, токена обновления доступа, токена автоматического входа.
client_credentials
-
для сценария получения приложением-клиентом системного токена.
<service>
-
Используемый сервис (цепочка аутентификации).
<_eventId>
-
Идентификатор действия (перехода к следующему состоянию сценария). Определяется отдельно для каждого состояния.
<execution>
-
Идентификатор предсессии аутентификации. В каждом конкретном запросе для продолжения сценария это значение должно быть равно значению поля
execution
из предыдущего ответа сервера на запрос к API.
<socialData>
-
Результат (список параметров) попытки аутентификации пользователя, полученный от стороннего ресурса и закодированный установленным способом.
Сторонний ресурс возвращает результат попытки аутентификации пользователя в виде JSON. Для получения списка параметров в требуемой форме необходимо представить ответ сервиса в формате
x-www-form-urlencoded
, представить полученную строку в кодировке UTF-8, взять битовое представление строки в кодировке UTF-8, закодировать битовое представление в Base64 (см. пример кода для клиентского веб-приложения).
{
"access_token": "8db408d1-6a60-4a87-8ef2-5fb0649c53c0",
"mpt": "65636054-bf02-41ea-889b-e18fc79df488",
"refresh_token": "8a3bedc0-7f4f-4cb9-8d57-052fcf47a4f6",
"mpt_expires_in": 59,
"refresh_expires_in": 599,
"scope": [
"cn",
"externalIdpToken",
"impersonator"
],
"claims": {
"cn": "79876543210"
},
"token_type": "Bearer",
"old_token": "8db408d1-6a60-4a87-8ef2-5fb0649c53c0",
"expires_in": 59,
"JWTToken": "eyJraWQiOiJwb2xpY3ljb250ZXh0dG9rZW46andzIiwiY3R5IjoiSldUIiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJiaXNfX19fXzE5OTkxMDAxNTQ5OTg0MyIsImFtciI6ImRldmljZV9zdG9yZWRfdG9rZW4iLCJpc3MiOiJtbGsiLCJ0b2tlbk5hbWUiOiJpZF90b2tlbiIsImNuIjoiNzk4NzY1NDMyMTAiLCJhdWQiOiJtbGsiLCJhdGgiOjE2NjUzNTUwNzMsImF6cCI6Im1sayIsImNsYWltcyI6eyJjbiI6Ijc5ODc2NTQzMjEwIn0sInJlYWxtIjoiXC9jdXN0b21lciIsInNjb3BlcyI6WyJpbXBlcnNvbmF0b3IiLCJjbiIsImV4dGVybmFsSWRwVG9rZW4iXSwiZXhwIjoxNjcwNTM5MDczLCJ0b2tlblR5cGUiOiJFbWJlZGRlZEpXVFRva2VuIiwiaWF0IjoxNjY1MzU1MDczfQ.YbdAHAjgNVVvq0Xh25d-0E8gzsaMemNWUQe8aTRFqs4"
}
Результат сценария аутентификации
В результате успешного выполнения сценария аутентификации с использованием ЕСИА выпущены:
-
токен доступа
8db408d1-6a60-4a87-8ef2-5fb0649c53c0
, -
токен обновления доступа
8a3bedc0-7f4f-4cb9-8d57-052fcf47a4f6
, -
мультиплатформенный токен
65636054-bf02-41ea-889b-e18fc79df488
, -
JWT токен.
Сценарий первичной аутентификации в RooX UIDM с использованием ЕСИА (с созданием привязки учётной записи RooX UIDM к идентификатору пользователя ЕСИА)
Начало сценария аутентификации
POST https://example.com/sso/oauth2/access_token
client_id=mlk&
client_secret=password&
realm=%2Fcustomer&
grant_type=urn%3Aroox%3Aparams%3Aoauth%3Agrant-type%3Am2m&
service=dispatcher
<client_id>
-
Идентификатор приложения-клиента. Возможные значения зависят от конфигурации.
<client_secret>
-
Пароль приложения-клиента. Возможные значения зависят от конфигурации.
<realm>
-
Группа пользователей RooX UIDM. Всегда используется значение
%2Fcustomer
, которое является uri-encoded значением/customer
.
<grant_type>
-
Способ авторизации пользователя:
urn:roox:params:oauth:grant-type:m2m
-
для сценариев получения токена доступа, токена обновления доступа, токена автоматического входа.
client_credentials
-
для сценария получения приложением-клиентом системного токена.
<service>
-
Используемый сервис (цепочка аутентификации).
В ответе на первичный запрос токена доступа возвращается форма ввода логина и пароля.
Поскольку аутентификация с использованием ЕСИА технически идентична аутентификации с использованием любого другого провайдера подлинности по протоколам OAuth2 и OpenID Connect, в составе ответа RooX UIDM возвращаются параметры и для других провайдеров подлинности.
HTTP/1.1 200 OK
{
"execution": "f16011ef-4c1c-4de2-a6c3-45e4497023f8…",
"form": {
"errors": [],
"fields": {
"password": {
"constraints": [
{
"name": "NotNull"
},
{
"attributes": {
"max": 1024,
"min": 1
},
"name": "Size"
}
]
},
"username": {
"constraints": [
{
"attributes": {
"enabledConfigurationKey": "com.rooxteam.sso.webflow.realm.{realm}.simple_login_form.login.pattern_enabled",
"max": 10,
"min": 10,
"skip": "(^[^9]+)|([^0-9])"
},
"name": "ConfigurableFilteredSize"
},
{
"name": "NotNull"
}
]
}
},
"name": "loginForm"
},
"serverUrl": "https://example.com:443/sso/auth/login-widget-router",
"step": "auth_form",
"view": {
"autologin": "skipped",
"esiaAppId": "771F01",
"esiaRedirectUri": "/esia_callback.jsp",
"esiaRequestScopesAsArray": [
"http://esia.gosuslugi.ru/usr_inf http://esia.gosuslugi.ru/usr_avt"
],
"esiaRequestUri": "https://esia-portal1.gosuslugi.ru/aas/oauth2/ac?state=6d896d3a-f1a7-440a-9c0d-2008260cfebe&client_id=OPG&response_type=code&access_type=offline&scope=http%3A%2F%2Fesia.gosuslugi.ru%2Fusr_inf×tamp=2022.10.03+18%3A23%3A26+%2B0000&redirect_uri=https%3A%2F%2Fexample.com%3A443%2Fsso%2Fesia_callback.jsp&client_secret=<…>&display=popup",
"isBlocked": false,
"ssoUrl": "https://example.com:443/sso",
}
}
esiaRequestUri
-
Адрес, на который необходимо перенаправить пользователя для выполнения им аутентификации в ЕСИА. В составе ссылки передаётся параметр адреса (
redirect_uri
), на который необходимо будет перенаправить пользователя после завершения им аутентификации. Также в составе ссылки указывается, какой объём данных (scope
) будет возвращён из ЕСИА (в данном случае — персональные данные пользователя,usr_inf
).
Если пользователь нажимает кнопку Вход с помощью ЕСИА, необходимо выполнить
переход на адрес, переданный в поле esiaRequestUri
.
После аутентификации пользователя в учётной записи ЕСИА ЕСИА возвращает пользователю код авторизации, который должен быть передан RooX UIDM.
Создание привязки к ЕСИА
После получения пользователем кода авторизации ЕСИА клиентское приложение направляет запрос на создание привязки учётной записи пользователя RooX UIDM к идентификатору пользователя ЕСИА.
POST https://example.com/sso/oauth2/access_token
client_id=mlk&
client_secret=password&
realm=%2Fcustomer&
grant_type=urn%3Aroox%3Aparams%3Aoauth%3Agrant-type%3Am2m&
service=esia&
_eventId=esia&
execution=<…>&
socialData=<…>
<client_id>
-
Идентификатор приложения-клиента. Возможные значения зависят от конфигурации.
<client_secret>
-
Пароль приложения-клиента. Возможные значения зависят от конфигурации.
<realm>
-
Группа пользователей RooX UIDM. Всегда используется значение
%2Fcustomer
, которое является uri-encoded значением/customer
.
<grant_type>
-
Способ авторизации пользователя:
urn:roox:params:oauth:grant-type:m2m
-
для сценариев получения токена доступа, токена обновления доступа, токена автоматического входа.
client_credentials
-
для сценария получения приложением-клиентом системного токена.
<service>
-
Используемый сервис (цепочка аутентификации).
<_eventId>
-
Идентификатор действия (перехода к следующему состоянию сценария). Определяется отдельно для каждого состояния.
<execution>
-
Идентификатор предсессии аутентификации. В каждом конкретном запросе для продолжения сценария это значение должно быть равно значению поля
execution
из предыдущего ответа сервера на запрос к API. <socialData>
-
Результат (список параметров) попытки аутентификации пользователя, полученный от стороннего ресурса и закодированный установленным способом.
Сторонний ресурс возвращает результат попытки аутентификации пользователя в виде JSON. Для получения списка параметров в требуемой форме необходимо представить ответ сервиса в формате
x-www-form-urlencoded
, представить полученную строку в кодировке UTF-8, взять битовое представление строки в кодировке UTF-8, закодировать битовое представление в Base64 (см. пример кода для клиентского веб-приложения).
Код авторизации, полученный пользователем от ЕСИА и переданный RooX UIDM, обменивается RooX UIDM в ЕСИА на токен идентификации пользователя. Из токена идентификации извлекаются сведения об аутентифицировавшемся в ЕСИА пользователе.
HTTP/1.1 200 OK
{
"execution": "<…>",
"form": {
"errors": [],
"fields": {
"password": {
"constraints": [
{
"name": "NotNull"
},
{
"attributes": {
"max": 1024,
"min": 1
},
"name": "Size"
}
]
},
"username": {
"constraints": [
{
"attributes": {
"enabledConfigurationKey": "com.rooxteam.sso.webflow.realm.{realm}.simple_login_form.login.pattern_enabled",
"max": 10,
"min": 10,
"skip": "(^[^9]+)|([^0-9])"
},
"name": "ConfigurableFilteredSize"
},
{
"name": "NotNull"
}
]
}
},
"name": "loginForm"
},
"serverUrl": "https://example.com:443/sso/auth/login-widget-router",
"step": "auth_form",
"view": {
"esiaAppId": "771F01",
"esiaRedirectUri": "/esia_callback.jsp",
"esiaRequestScopesAsArray": [
"http://esia.gosuslugi.ru/usr_inf http://esia.gosuslugi.ru/usr_avt"
],
"esiaRequestUri": "https://esia-portal1.gosuslugi.ru/aas/oauth2/ac?state=d54b0e6b-fecf-4b3a-8bf8-e8ca865658ad&client_id=OPG&response_type=code&access_type=offline&scope=http%3A%2F%2Fesia.gosuslugi.ru%2Fusr_inf×tamp=2022.10.03+18%3A23%3A38+%2B0000&redirect_uri=https%3A%2F%2Fexample.com%3A443%2Fsso%2Fesia_callback.jsp&client_secret=<…>&display=popup",
"firstName": "Имя030",
"fullName": "Имя030 Отчество030 Фамилия030",
"isBlocked": false,
"socialNetworkId": "esia",
"ssoUrl": "https://example.com:443/sso",
}
}
execution
-
Идентификатор предсессии аутентификации.
Аутентификация пользователя в учётной записи RooX UIDM для создания привязки к этой учётной записи
9876543210
и паролем password
POST https://example.com/sso/oauth2/access_token
client_id=mlk&
client_secret=password&
realm=%2Fcustomer&
grant_type=urn%3Aroox%3Aparams%3Aoauth%3Agrant-type%3Am2m&
service=dispatcher&
_eventId=next&
username=9876543210&
password=password&
execution=<…>
<client_id>
-
Идентификатор приложения-клиента. Возможные значения зависят от конфигурации.
<client_secret>
-
Пароль приложения-клиента. Возможные значения зависят от конфигурации.
<realm>
-
Группа пользователей RooX UIDM. Всегда используется значение
%2Fcustomer
, которое является uri-encoded значением/customer
.
<grant_type>
-
Способ авторизации пользователя:
urn:roox:params:oauth:grant-type:m2m
-
для сценариев получения токена доступа, токена обновления доступа, токена автоматического входа.
client_credentials
-
для сценария получения приложением-клиентом системного токена.
<service>
-
Используемый сервис (цепочка аутентификации).
<_eventId>
-
Идентификатор действия (перехода к следующему состоянию сценария). Определяется отдельно для каждого состояния.
<username>
-
Логин пользователя.
<password>
-
Пароль пользователя.
<execution>
-
Идентификатор предсессии аутентификации. В каждом конкретном запросе для продолжения сценария это значение должно быть равно значению поля
execution
из предыдущего ответа сервера на запрос к API.
9876543210
и паролем password
и привязке идентификатора ЕСИАHTTP/1.1 200 OK
{
"execution": "<…>",
"view": {
"socialNetworkId": "esia",
"firstName": "Имя030",
"fullName": "Имя030 Отчество030 Фамилия030",
"step": "attach_form"
},
"form": {
"name": "attachForm",
"fields": {},
"errors": []
},
"serverUrl": "https://example.com:443/sso/auth/social-attach",
"step": "show_attach_form"
}
Запрос токена доступа после выполнения привязки учётной записи RooX UIDM к идентификатору ЕСИА
POST https://example.com/sso/oauth2/access_token
client_id=mlk&
client_secret=password&
realm=%2Fcustomer&
grant_type=urn%3Aroox%3Aparams%3Aoauth%3Agrant-type%3Am2m&
service=dispatcher&
_eventId=next&
execution=<…>
HTTP/1.1 200 OK
{
"access_token": "9eb8528f-90a5-41d8-8739-cf0bc4ef9be8",
"mpt": "0cd7a297-c195-4cd3-9c8d-7d11f34a3ce3",
"refresh_token": "95d28a74-bd27-4cae-80f8-326c6d1e9246",
"mpt_expires_in": 59,
"refresh_expires_in": 599,
"scope": [
"cn",
"externalIdpToken",
"impersonator"
],
"claims": {
"cn": "79876543210"
},
"token_type": "Bearer",
"old_token": "9eb8528f-90a5-41d8-8739-cf0bc4ef9be8",
"expires_in": 59,
"JWTToken": "<…>"
}
Результат сценария аутентификации
В результате успешного выполнения сценария аутентификации с использованием ЕСИА выпущены:
-
токен доступа
9eb8528f-90a5-41d8-8739-cf0bc4ef9be8
, -
токен обновления доступа
95d28a74-bd27-4cae-80f8-326c6d1e9246
, -
мультиплатформенный токен
0cd7a297-c195-4cd3-9c8d-7d11f34a3ce3
, -
JWT-токен.
Управление привязками учётной записи пользователя к ЕСИА
Получение списка привязок учётной записи пользователя к ЕСИА
GET https://example.com/sso/federation-webapi-2.0/customers/@me/partnerMappings
@me
-
Псевдоидентификатор, указывающий, что запрос выполняется от имени текущего авторизованного пользователя. Пользователь определяется на основе токена доступа.
Запрос возвращает список всех существующих привязок учётной записи RooX UIDM к идентификаторам в ЕСИА, социальных сетях или сервисах.
HTTP/1.1 200 OK
[
{
"id": "sso_____8a5f0c46-0f1e-4a5a-a970-c4e66a0fe3c0",
"type": "social",
"partnerId": "esia",
"externalUserId": "1000321821",
"externalUser": {
"userId": "1000321821",
"userInfo": "{\"firstName\":\"Имя030\",\"lastName\":\"Фамилия030\",\"middleName\":\"Отчество030\",\"snils\":\"000-000-600 30\",\"gender\":\"M\",\"citizenship\":\"RUS\",\"birthDate\":\"30.01.1998\",\"birthPlace\":\"Общая тестовая УЗ! НЕ изменяйте данные! НЕ изменяйте пароль!\"}",
"firstName": "Имя030",
"lastName": "Фамилия030",
"middleName": "Отчество030",
"fullName": "Имя030 Отчество030 Фамилия030",
"profile": "{\"snils\":\"000-000-600 30\"}"
},
"auth": {
"clientId": "771F01",
"accessToken": "<…>",
"otpSentCount": 0,
"otpTryCount": 0
},
"created": "2022-10-03T18:24:38Z",
"customerId": "bis_____199910015499843",
"partnerDataAllowed": true,
"messagePostingAllowed": false,
"updated": "2022-10-03T18:24:38Z",
"realm": "customer",
"enabled": true
}
]
В каждом из элементов возвращаемого списка привязок:
-
поле
id
указывает на идентификатор привязки в RooX UIDM, -
поле
partnerId
указывает на ЕСИА, социальную сеть или сервис, -
поле
externalUserId
указывает на идентификатор пользователя RooX UIDM в ЕСИА, социальной сети или сервисе.
Удаление привязки учётной записи RooX UIDM к ЕСИА
DELETE https://example.com/sso/federation-webapi-2.0/customers/@me/partnerMappings?partnerId=esia
Будут удалены привязки текущего пользователя (@me
) к сервису ЕСИА.
HTTP/1.1 200 OK
[
{
"id": "sso_____8a5f0c46-0f1e-4a5a-a970-c4e66a0fe3c0",
"type": "social",
"partnerId": "esia",
"externalUserId": "1000303233",
"externalUser": {
"userId": "1000303233",
"userInfo": "{\"firstName\":\"Денис\",\"lastName\":\"Фамилия006\",\"middleName\":\"Отчество006\",\"snils\":\"000-000-600 06\",\"inn\":\"335669961450\",\"gender\":\"M\",\"citizenship\":\"RUS\",\"birthDate\":\"13.07.1985\",\"birthPlace\":\"Челябинск\"}",
"firstName": "Денис",
"lastName": "Фамилия006",
"middleName": "Отчество006",
"fullName": "Денис Отчество006 Фамилия006",
"profile": "{\"inn\":\"335669961450\",\"snils\":\"000-000-600 06\"}"
},
"auth": {
"clientId": "771F01",
"accessToken": "<…>",
"secondFactorEnabled": false,
"otpSentCount": 0,
"otpTryCount": 0
},
"created": "2022-10-09T22:37:35Z",
"customerId": "bis_____199910015499843",
"partnerDataAllowed": true,
"messagePostingAllowed": false,
"updated": "2022-10-09T22:37:53Z",
"realm": "customer",
"enabled": true
}
]
В результате запроса возвращается список удалённых привязок.
В случае отсутствия привязок к заданными характеристиками возвращается пустой
список ([]
).
Получение информации о токене (интроспекция токена)
Некоторые сведения о токене доступа можно получить, направив запрос на
эндпоинт /sso/oauth2/tokeninfo
с предоставлением токена, информацию
о котором необходимо получить.
POST https://example.com/sso/oauth2/tokeninfo?access_token=9eb8528f-90a5-41d8-8739-cf0bc4ef9be8
HTTP/1.1 200 OK
{
"sub": "bis_____199910015499843",
"auth_level": "5",
"amr": [
"urn:uidm:esia:pwd"
],
"roles": [
"ROLE_CUSTOMER"
],
"ext_sub": "199910015499843",
"cn": "9876543210",
"token_type": "Bearer",
"client_id": "mlk",
"access_token": "9eb8528f-90a5-41d8-8739-cf0bc4ef9be8",
"executionId": "4326ced9-5d03-40c4-9448-aed3a6e6cea2",
"scope": [
"impersonator",
"cn",
"externalIdpToken"
],
"auth_time": 1664821479,
"realm": "/customer",
"authType": "social_esia",
"expires_in": 59,
"jti": "9eb8528f-90a5-41d8-8739-cf0bc4ef9be8"
}
API получения сведений о пользователях из внешних источников данных
RooX UIDM посредством External Identity Provider API предоставляет возможности поиска:
-
учетной записи пользователя по его идентификатору в ЕСИА,
-
учетной записи пользователя по предоставленному им токену доступа.
Если ответ RooX UIDM о наличии привязок учётной записи пользователя к ЕСИА положителен, то External Identity Provider API может использоваться клиентским приложением для получения дополнительных данных о пользователе из ЕСИА.
События, протоколируемые в СУБД аудита в ходе сценария аутентификации с использованием ЕСИА
sso.auth.success
-
Успешная попытка аутентификации пользователя в UIDM
sso.auth.fail
-
Неудачная попытка аутентификации пользователя в UIDM
sso.auth.revoke
-
Принудительное завершение сессии
sso.auth.logout
-
Инвалидация сессии пользователя
sso.auth.auto.fail
-
Неуспешная попытка аутентификации с использованием токена автоматического входа
sso.auth.autologin.token.created
-
Успешная аутентификация с использованием токена автоматического входа (с последующим выпуском токена доступа, токена обновления доступа)
sso.auth.token.lifetime.end
-
Завершение сессии по таймауту
sso.auth.increase.success
-
Успешное повышение уровня доступа в текущей сессии
sso.auth.increase.fail
-
Неуспешная попытка повышения уровня доступа в текущей сессии
sso.api.session.delete.success
-
Удаление сессии через API управления сессиями (
/sessionlist
) или АРМ Контакт-Центра sso.api.session.delete.fail
-
Неуспешное удаление сессии через API управления сессиями (
/sessionlist
) или АРМ Контакт-Центра sso.auth.preauth.success
-
Попытки аутентификации пользователей с использованием логина и пароля в UIDM, которые завершились успешно (сам процесс продолжается; следующим шагом можеть быть ввод одноразового пароля). Токен доступа еще не выпущен, так что это событие можно использовать только для предварительных действий, например «прогрева» кеша бизнес-данных.
webapi.social.mapping.create.success
-
Успешное создание привязки
webapi.social.mapping.create.fail
-
Неуспешное создание привязки
webapi.social.mapping.delete.success
-
Успешное удаление привязки
webapi.social.mapping.delete.fail
-
Неуспешное удаление привязки
Выборка из БД аудита событый, относящихся к функциональности аутентификации с использованием ЕСИА
При помощи SQL-запроса можно произвести выборку из БД аудита событий, относящихся к успешной аутентификации или другим событиям после заданных даты и времени.
SELECT "authtype",
Count(*),
service,
url,
To_char("timeend", 'YYYY-MM')
FROM "operationaudit"
WHERE "name" = 'sso.auth.get_access_token.success'
AND "timeend" > '2022-08-01 00:00:00'
GROUP BY "authtype",
service,
url,
To_char("timeend", 'YYYY-MM')
ORDER BY To_char("timeend", 'YYYY-MM'),
"authtype",
service;
В поле authType
результата выполнения такого запроса будет указано на способ
аутентификации, использовавшийся для выпуска токена доступа (для события
sso.auth.get_access_token.success
в примере будут выбраны в том числе
способы аутентификации esia
, login-by-esia
, registration-by-esia
,
social-esia
, social-validate
).
Мониторинг и метрики функциональности аутентификации с использованием ЕСИА
Адреса сбора метрик
POST https://{sso_host}:{prometheus_port}/{query}
{sso_host}
-
Имя хоста или IP-адрес сервера RooX UIDM.
Конечная точка мониторинга не доступна на балансировщике нагрузки; используйте внутренние сетевые адреса.
В каждом запросе метрик необходимо использовать Basic-авторизацию:
Authorization: Basic dGVzdGxvZ2luOnRlc3RwYXNzd29yZA==
sso-server
и federation-webapi
(порты указаны по умолчанию)
sso-server
|
|
federation-webapi
|
|
{sso_host}
|
Имя хоста или IP-адрес сервера RooX UIDM. Конечная точка мониторинга не доступна на балансировщике нагрузки; используйте внутренние сетевые адреса. |
Порты по умолчанию, по которым доступны метрики, указаны в статье о мониторинге и метриках, и могут быть изменены настройками RooX UIDM.
Метрики функциональности аутентификации с использованием ЕСИА
Работа API аутентификации
rx_authnz_endpoint
com.rooxteam.monitoring.filter.StatisticalMonitoringFilter...*
Метрика отображает время ответа API аутентификации и авторизации в миллисекундах (мс).
Label | Срез | Примеры значений |
---|---|---|
|
Тип API |
|
|
Тип API |
|
|
Результат операции |
|