Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Единая система идентификации и авторизации (ЕСИА) – это единственный способ верифицировать личность пользователя. Если продукт работает с деньгами, решает юридические задачи или работает с медицинскими данными, без интеграции с ЕСИА не обойтись. Рассказываем, что нужно знать, чтобы работать с этой инфраструктурой.

ЕСИА появилась в 2010 году и изначально использовалась для авторизации на Портале госуслуг. За прошедшее время возможности системы постоянно развивались, и сегодня коммерческие организации используют её, чтобы связывать учётные записи пользователя с их оффлайн-личностью.

То есть если компании нужно удостовериться, что по ту сторону экрана действительно тот человек, которым представился пользователь, ЕСИА предоставляет такую возможность. И самое главное – эта идентификация имеет юридическую значимость.

Введение

Стоит упомянуть, что есть компании, которые имеют готовые решения для интеграции с ЕСИА, например эта или вот эта — если вам лень во всем этом разбираться, можно воспользоваться их услугами. Сами не пользовались, советовать не можем.

  1. Регистрация ИС в регистре информационных систем ЕСИА
  2. Регистрация ИС в тестовой среде
  3. Выполнение доработки системы для взаимодействия с ЕСИА

В данной статье будет описан только 3 пункт, предыдущие 2 – бюрократия, оставим ее за рамками Хабра. В методичке предлагают реализовать интеграцию 2 способами: SAML или OpenID Connect. Говорят,

с 01.01.2018 г. взаимодействие по протоколу SAML 2.0 больше не будет разрешено (только для действующих систем). Для подключения к ЕСИА необходимо будет использовать протокол OAuth 2.0 / OpenID Connect (сейчас доступны оба варианта).

Поэтому мы выбрали красную таблетку второй вариант. Согласно методичке, базовый сценарий аутентификации представляет собой примерно следующие шаги:

  1. Пользователь нажимает на веб-странице системы-клиента кнопку «Войти через ЕСИА»
  2. Система-клиент отправляет в ЕСИА запрос на аутентификацию
  3. ЕСИА осуществляет аутентификацию пользователя посредством логина-пароля
  4. После успешной аутентификации ЕСИА возвращает ответ системе с кодом аутентификации.
  5. Используя код аутентификации система получает доступ к данным пользователя

Gosuslugi.ru — вход в личный кабинет для физических лиц

Типы учетных записей на сайте Госуслуги

Возможности для зарегистрированных пользователей

Преимущества подтвержденного аккаунта

Работа с кабинетом на сайте Госуслуг будет одинаково полезной как для физических, так и юридических лиц. В зависимости от пользователя, в нашем случае физическое лицо, вход на сайт возможен сразу несколькими способами. Для авторизации необходимо зайти на основной сайт Госуслуг и перейти в раздел “Личный кабинет”, где указать закрепленный за учетной записью номер мобильного, СНИЛС или специально выпущенную ЭЦП. Стоит учесть, что после регистрации кабинета на портале Госуслуг, гражданин может воспользоваться этой же учетной записью для посещения других важных сайтов организаций: налоговой, пенсионного фонда, ГИС ЖКХ, личного сайта мэра столицы и многих других. Поэтому нужно быть крайне осторожным и внимательным при вводе данных и выборе пароля. Ведь от этого зависит безопасность ваших персональных данных.

Войти по номеру телефона

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Если с первой попытки осуществить вход не удалось, стоит проверить правильность указанных данных. Возможно, при указании мобильного была допущена ошибка.

Вход в личный кабинет Госуслуг через СНИЛС

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Существенной разницы при входе этими двумя способами нет. Главное, чтобы внесенные при регистрации сведения соответствовали тому, что вы вводите при повторном посещении сайта. Однако при входе с помощью СНИЛС могут возникнуть проблемы, если:

  • была допущена ошибка во время регистрации;
  • СНИЛС является недействительным;
  • после смены ФИО не был заменен страховой полис.

Вход с ЭЦП

Последний способ осуществлять безопасный вход в систему Госуслуг – использовать ЭЦП. Этот вариант чаще всего применяют юр лица, это упрощает процесс работы с порталом. Но и обычные граждане тоже могут его использовать. Правда он требует затрат на создание самой цифровой подписи и установку приложения для распознания ключа.

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

  • выбрать способ входа с ЭЦП;
  • Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

  • система запросит вставить флешку, диск или карту, на которой записан ключ;
  • Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

  • после идентификации ключа будет осуществлен вход в личный кабинет портала.

Привет, Хабр! В одном из постов блога мой коллега Иван писал о нашем блокчейн-сервисе для онлайн-голосований WE.Vote. Он подробно разобрал, как работает WE.Vote с точки зрения технологий. Но чтобы сервисы удаленного голосования можно было использовать для принятия официальных решений юрлиц, не хватает еще одного важного компонента — достоверной верификации участников. В России для этого можно провести интеграцию с ЕСИА (Единой Системой Идентификации и Аутентификации) — проще говоря, с Госуслугами. Интеграция эта заметно отличается от интеграции с другими OAuth2-сервисами, как, например, Google или VK. В этом посте мы постараемся помочь тем, кто захочет интегрировать ЕСИА в свой сервис через стек, подобный нашему, а также дадим несколько полезных ссылок по ЕСИА в принципе.

Зачем нам ЕСИА?

Согласно Федеральному закону № 225-ФЗ от 28.06.2021 «О внесении изменений в часть первую Гражданского кодекса Российской Федерации», многие организаций в РФ получили право проводить официальные собрания и голосования по корпоративным вопросам дистанционно.

Ранее решения с юридической силой требовали очных собраний или голосований по почте. Голосования по почте не отличаются надежностью, а собрать много руководителей со всей России в одном месте — это кошмар с точки зрения затрат.

Чтобы проводить мероприятия принятия решения дистанционно в соответствии с новым федеральным законом, необходимо предоставить возможность достоверного установления личности участников. В России это возможно через проверку доступа к верифицированному аккаунту на Госуслугах.

Стек и схема интеграции

Для интеграции мы используем:

  • Typescript, ReactJS, NestJS

  • КриптоПро CSP 4

Формирование подписи

Прежде чем разбирать все по порядку, кое о чем стоит подумать заранее. В отличие от других интеграций, запросы к ЕСИА должны сопровождаться подписью ГОСТ Р 34.10/11-2012, а не просто API key. Создать такую подпись можно с помощью утилиты КриптоПро CSP. Для нас основная задача здесь — правильно обернуть эту утилиту в Docker, чтобы с ней можно было работать как с отдельным сервисом в рамках нашей инфраструктуры. Получившийся сервис мы выложили в открытый доступ на гитхабе. Инструкция по запуску есть в README.md.

В процесс сборки Docker образа сервиса с утилитой КриптоПро мы встроили:

  • Установку утилиты КриптоПро СSP 4 из .deb пакета

  • Установку лицензии КриптоПро

  • Загрузку корневого сертификата тестовой или основной среды ЕСИА

  • Загрузку пользовательского сертификата с PIN кодом

  • REST-сервер с методом, позволяющим создавать подписи

Таким образом вся криптография собрана в отдельном самостоятельном компоненте, который можно использовать, когда необходимо что-нибудь подписать. Вот как это выглядит на бэкенде:

private async signParams(params: Record<string, string>) {
 const time = moment().format('YYYY.MM.DD HH:mm:ss ZZ')
 const state = uuid()
 const clientId = this.clientId
 const scope = this.scope

 const { data: { result: clientSecret } } = await axios.post<{ result: string }>(
   `${this.cryptoProServiceAddress}/cryptopro/sign`,
   { text: [scope, time, clientId, state].join('') },
 )

 return {
   ...params,
   timestamp: time,
   client_id: clientId,
   scope,
   state,
   client_secret: clientSecret.replace(/\n/g, ''),
 }
}

С созданием подписей разобрались, теперь последовательно разберем, как реализовать схему выше.

Создание ссылки для редиректа на страницу ЕСИА

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

async getAuthLink(redirectLink: string) {
 const params = await this.signParams({
   redirect_uri: redirectLink,
   response_type: 'code',
   access_type: 'offline',
 })
 const authQuery = new URLSearchParams(params)
 const authURL = `${this.esiaHost}/aas/oauth2/ac`
 return `${authURL}?${authQuery}`
}

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

Получение авторизационного токена ЕСИА

Запрос токена идентификации

После успешной аутентификации на странице ЕСИА пользователь возвращается на фронтенд приложения по указанному нами адресу. ЕСИА передаёт авторизационный токен в виде get-параметра code. Этот токен необходимо передать на бэкенд и запросить с его помощью идентификационный токен пользователя.

async getTokens(code: string) {
 try {
   const params = await this.signParams({
     grant_type: 'authorization_code',
     token_type: 'Bearer',
     redirect_uri: 'no',
     code,
   })
   const authURL = `${this.host}/aas/oauth2/te`
   const authQuery = new URLSearchParams(params)
   const { data: tokens } = await axios.post(`${authURL}?${authQuery}`)
   return {
     idToken: tokens.id_token,
     accessToken: tokens.access_token,
     refreshToken: tokens.refresh_token,
   }
 } catch (e) {
   const status = e.response ? e.response.status : 500
   const message = e.response ? e.response.data.error_description : e.message
   throw new HttpException('Failed to get auth tokens: ' + message, status)
 }
}

Получение данных о пользователе

Идентификационный токен пользователя необходимо проверить с помощью публичного RSA ключа от ЕСИА и получить из него id пользователя. С помощью этого id и accessToken, который мы получили в предыдущем шаге, мы уже наконец можем запросить персональные данные пользователя.

getUserIdFromToken(idToken: string) {
 const decodedIdToken = verify(idToken, this.esiaPublicKey, {
   algorithms: ['RS256'],
   audience: 'WE_VOTE',
 }) as EsiaParsedToken
 return decodedIdToken['urn:esia:sbj']['urn:esia:sbj:oid']
}

async getUserInfo(tokens: EsiaTokens) {

 const { idToken, accessToken } = tokens
 const oId = this.getUserIdFromToken(idToken)

 const [{ data: mainInfo }, { data: contactsInfo }] = await Promise.all([
   axios.get(`${this.esiaHost}/rs/prns/${oId}`, {
     headers: {
       Authorization: `Bearer ${accessToken}`,
     },
   }),
   axios.get(`${this.esiaHost}/rs/prns/${oId}/ctts?embed=(elements)`, {
     headers: {
       Authorization: `Bearer ${accessToken}`,
     },
   }),
 ])

 const email = contactsInfo.elements.find(({ type }: { type: string }) => type === 'EML')

 return {
   id: oId,
   firstName: mainInfo.firstName,
   lastName: mainInfo.lastName,
   surName: mainInfo.middleName,
   trusted: mainInfo.trusted,
   email: email ? {
     value: email.value.toLowerCase(),
     verified: email.vrfStu === 'VERIFIED',
   } : null,
 }
}

На этом шаге мы уже имеем все необходимые данные о пользователе. Остается только занести их в свою систему и закончить авторизацию.

Больше проверок:  Обеспечение безопасности предприятия Комплексные инспекционные услуги | Надежные решения
Полный код интеграционного модуля на бэкенде
import { HttpException } from '@nestjs/common'
import * as moment from 'moment'
import { v4 as uuid } from 'uuid'
import { URLSearchParams } from 'url'
import axios from 'axios'
import { verify } from 'jsonwebtoken'

type EsiaTokens = {
 idToken: string,
 accessToken: string,
}

type EsiaParsedToken = {
 'urn:esia:sbj': {
   'urn:esia:sbj:oid': string,
 },
}

export class EsiaApiService {
 private readonly clientId = 'WE_VOTE'
 private readonly scope = ['openid', 'email', 'fullname'].join(' ')

 constructor(
   private readonly esiaHost: string, // 'https://esia-portal1.test.gosuslugi.ru' или 'https://esia.gosuslugi.ru'
   private readonly esiaPublicKey: string, // можно взять из http://esia.gosuslugi.ru/public/esia.zip
   private readonly cryptoProServiceAddress: string, // адрес сервиса по созданию подписей e.g 'http://127.0.0.1:3037'
 ) {
 }

 async getAuthLink(redirectLink: string) {
   const params = await this.signParams({
     redirect_uri: redirectLink,
     response_type: 'code',
     access_type: 'offline',
   })
   const authQuery = new URLSearchParams(params)
   const authURL = `${this.esiaHost}/aas/oauth2/ac`
   return `${authURL}?${authQuery}`
 }

 private async signParams(params: Record<string, string>) {
   const time = moment().format('YYYY.MM.DD HH:mm:ss ZZ')
   const state = uuid()
   const clientId = this.clientId
   const scope = this.scope

   const { data: { result: clientSecret } } = await axios.post<{ result: string }>(
     `${this.cryptoProServiceAddress}/cryptopro/sign`,
     { text: [scope, time, clientId, state].join('') },
   )

   return {
     ...params,
     timestamp: time,
     client_id: clientId,
     scope,
     state,
     client_secret: clientSecret.replace(/\n/g, ''),
   }
 }

 async getTokens(code: string) {
   try {
     const params = await this.signParams({
       grant_type: 'authorization_code',
       token_type: 'Bearer',
       redirect_uri: 'no',
       code,
     })
     const authURL = `${this.esiaHost}/aas/oauth2/te`
     const authQuery = new URLSearchParams(params)
     const { data: tokens } = await axios.post(`${authURL}?${authQuery}`)
     return {
       idToken: tokens.id_token,
       accessToken: tokens.access_token,
       refreshToken: tokens.refresh_token,
     }
   } catch (e) {
     const status = e.response ? e.response.status : 500
     const message = e.response ? e.response.data.error_description : e.message
     throw new HttpException('Failed to get auth tokens: ' + message, status)
   }
 }

 getUserIdFromToken(idToken: string) {
   const decodedIdToken = verify(idToken, this.esiaPublicKey, {
     algorithms: ['RS256'],
     audience: this.clientId,
   }) as EsiaParsedToken
   return decodedIdToken['urn:esia:sbj']['urn:esia:sbj:oid']
 }

 async getUserInfo(tokens: EsiaTokens) {

   const { idToken, accessToken } = tokens
   const oId = this.getUserIdFromToken(idToken)

   const [{ data: mainInfo }, { data: contactsInfo }] = await Promise.all([
     axios.get(`${this.esiaHost}/rs/prns/${oId}`, {
       headers: {
         Authorization: `Bearer ${accessToken}`,
       },
     }),
     axios.get(`${this.esiaHost}/rs/prns/${oId}/ctts?embed=(elements)`, {
       headers: {
         Authorization: `Bearer ${accessToken}`,
       },
     }),
   ])

   const email = contactsInfo.elements.find(({ type }: { type: string }) => type === 'EML')

   return {
     id: oId,
     firstName: mainInfo.firstName,
     lastName: mainInfo.lastName,
     surName: mainInfo.middleName,
     trusted: mainInfo.trusted,
     email: email ? {
       value: email.value.toLowerCase(),
       verified: email.vrfStu === 'VERIFIED',
     } : null,
   }
 }

}

Надеюсь, статья оказалась для вас полезной. Желаю, чтобы у вас все получилось без особых проблем! 

Полезные материалы по теме

Регистрация в кабинете

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Предупреждает ли Минкомсвязи о регламентных работах

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

Отключения ЕСИА редки и, как правило, происходят в часы наименьшей нагрузки на сервис,
а восстановление работы авторизации происходит автоматически.

Получение данных организации

Полученный токен доступа для запроса данных по организации мы использовать не можем, т.к. он завязан на определенный scope. Поэтому нужно получить отдельный токен. По сути методы получения токена доступа для организации и информации по ней не сильно отличаются от рассмотренных ранее. Для получения токена доступа мы используем идентификатор организации, код аутентификации, State предыдущего запроса на токен доступа. Новый scope формируется как список scope’ов организации, разделенных через пробел, например:

http://esia.gosuslugi.ru/org_shortname/?org_oid={organizationId} http://esia.gosuslugi.ru/ org_fullname/?org_oid={organizationId}

/// <summary>
/// Получить токен для доступа к организациям пользователя
/// </summary>
/// <param name="organizationId">Идентификатор организации</param>
/// <param name="code">Код доступа</param>
/// <param name="state">Идентификатор запроса</param>
/// <param name="callbackUrl">Коллбек адрес для редиректа после авторизации</param>
/// <param name="certificate">Сертификат для подписи запросов</param>
/// <returns>Токен для доступа к организациям пользователя</returns>
public async Task<EsiaAuthToken> GetOrganizationAccessToken(
	string organizationId,
	string code,
	string state,
	string callbackUrl = null,
	X509Certificate2 certificate = null)
{
	var timestamp = DateTime.UtcNow.ToString("yyyy.MM.dd HH:mm:ss +0000");
	var scope = string.Join(" ", Configuration.OrganizationScope.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
		.Select(orgScope => $"{Configuration.EsiaBaseUrl}/{orgScope}?org_oid={organizationId}"));

	// Create signature in PKCS#7 detached signature UTF-8
	var clientSecret = GetClientSecret(
		certificate,
		scope,
		timestamp,
		Configuration.ClientId,
		state);

	var requestParams = new List<KeyValuePair<string, string>>
	{
		new KeyValuePair<string, string>("client_id", Configuration.ClientId),
		new KeyValuePair<string, string>("code", code),
		new KeyValuePair<string, string>("grant_type", "client_credentials"),
		new KeyValuePair<string, string>("state", state),
		new KeyValuePair<string, string>("scope", scope),
		new KeyValuePair<string, string>("timestamp", timestamp),
		new KeyValuePair<string, string>("token_type", "Bearer"),
		new KeyValuePair<string, string>("client_secret", clientSecret),
		new KeyValuePair<string, string>("redirect_uri", callbackUrl)
	};
	using (var client = new HttpClient())
	using (var response = await client.PostAsync(Configuration.EsiaTokenUrl, new FormUrlEncodedContent(requestParams)))
	{
		response.EnsureSuccessStatusCode();
		var tokenResponse = await response.Content.ReadAsStringAsync();

		var token = JsonConvert.DeserializeObject<EsiaAuthToken>(tokenResponse);

		Argument.NotNull(token?.AccessToken, "Не найден токен доступа");
		Argument.Require(state == token.State, "Идентификатор запроса некорректный");

		return token;
	}
}

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

/// <summary>
/// Получить данные организации
/// </summary>
/// <param name="organizationLink">Ссылка на организацию</param>
/// <param name="accessToken">Токен доступа</param>
/// <returns>Данные организации</returns>
public async Task<EsiaOrganization> GetOrganization(string organizationLink, string accessToken)
{
	using (var client = new HttpClient())
	{
		client.DefaultRequestHeaders.Clear();
		client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

		var response = await client.GetStringAsync(organizationLink);
		var organization = JsonConvert.DeserializeObject<EsiaOrganization>(response);
		return organization;
	}
}

Полностью же код получения пользователя и его организации из ЕСИА выглядит так:

// Получим токен доступа по коду доступа
var accessToken = await IntegrationService.GetAccessToken(request.Code, request.CallbackUrl);

// Получим информацию о пользователе из ЕСИА
var user = await IntegrationService.GetUser(accessToken.Payload.UserId, accessToken.AccessToken);

// Если у пользователя есть организации - полезем в ЕСИА за ними
if (user.OrganizationLinks?.Links?.Any() == true)
{
	// Новый токен доступа - чисто для организаций
	var link = user.OrganizationLinks.Links.First();
	var organizationId = link.Split('/').Last();
	var organizationAccessToken = await IntegrationService.GetOrganizationAccessToken(organizationId, request.Code, accessToken.State, request.CallbackUrl);

	user.Organization = await IntegrationService.GetOrganization(link, organizationAccessToken.AccessToken);
}

return user;

Что такое ЕСИА

Министерство цифрового развития, связи и массовых коммуникаций уже больше десяти лет разрабатывает
и совершенствует безопасный сервис авторизации для различных государственных сервисов и сайтов. Он получил
название «Единая система идентификации и аутентификации» — ЕСИА. Это универсальный ключ доступа к ресурсам
электронного правительства РФ.

Если вначале ЕСИА применялась для авторизации на портале Госуслуг, то по мере выполнения Федерального
проекта «Цифровое государственное управление» и появления
новых суперсервисов, ее сфера применения
расширилась.

ЕСИА применяется для взаимодействия с органами власти и за пределами государственного сектора.
К сервису подключаются порталы и IT-системы частных компаний из числа тех, для которых точная
и безошибочная идентификация пользователей — приоритет.

Доверие к ЕСИА обеспечено продуманной криптографической защитой и тем фактом, что учетная запись
пользователя этой системы содержит подтвержденную государством информацию, начиная с фамилии и заканчивая
номером пенсионного свидетельства.

Как работает ЕСИА

С точки зрения пользователя вход на сайт или в мобильное приложение при помощи ЕСИА
не отличается от использования аккаунта Google, Яндекс или одной из популярных социальных сетей.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

В момент ввода данных сайт обращается к отдельному программному модулю — коннектору, отвечающему
за связь с ЕСИА. Коннектор формирует зашифрованный запрос к серверам сервиса и получает
в ответ пакет с личными данными пользователя. Они расшифровываются при помощи криптографического
ключа, выданного организации заранее, еще на этапе настройки коннектора. Затем, личные данные передаются
на сайт.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Такая схема подключения позволяет реализовать разнообразные сценарии взаимодействия пользователя и сайта.
В случае с банковскими продуктами использование сервиса может выглядеть так:

  1. Пользователь заходит на сайт банка, чтобы оформить кредит.
  2. Выбрав нужную сумму в кредитном калькуляторе, он переходит к оформлению заявки.
  3. Вместо того чтобы заполнять длинную анкету с личными данными, пользователь кликает на кнопку
    авторизации в ЕСИА.
  4. Модуль-коннектор переходит на сайт ЕСИА и открывает форму авторизации.
  5. Пользователь вводит телефон, email или СНИЛС и пароль и подтверждает передачу персональных данных.
  6. Система проверяет корректность данных и возвращает пользователя на сайт банка, а коннектор
    получает и расшифровывает ответ, содержащий необходимую банку информацию о пользователе.
  7. Анкета, необходимая для создания заявки на кредит, заполняется автоматически.
  8. Пользователю остается подтвердить отправку заявки и ждать звонка менеджера.

Предисловие

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Клиентская поддержка через кабинет

  • Поддержка клиентов осуществляется по телефону:
    • 8 800 100-70-10
    • +7 495 727-47-47
  • Электронный адрес для обратной связи
  • Ответы на частые вопросы в разделе «Помощь и поддержка».
  • Поддержка в Telegram.

Где можно найти дополнительную информацию о ЕСИА

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Инструкции по работе с сервисом периодически пересматриваются, обновляются и дополняются,
поэтому, изучив ответы на распространенные вопросы, стоит обратиться к первоисточникам.

Общую информацию о подключении к ЕСИА, а также контакты для связи с Ситуационным
центром Минкомсвязи, где можно получить консультацию по правовым аспектам подключения, приведены на информационной странице ЕСИА
на портале Госуслуг.

Актуальные документы, касающиеся сервиса, публикуются на официальном портале Минкомсвязи РФ. Перечень
документов, которые публикует министерство, включает в себя:

Какие возможности открывает такая идентификация

1. Клиент может подписывать юридически значимые электронные документы, получать защищённый доступ к конфиденциальной информации, медицинским данным и т.д.

2. Появляется возможность автоматически заполнять в анкетах и заявках персональные данные клиента: ФИО, данные паспорта, ИНН, информация о детях и др. При этом компания может быть уверена, что эти данные абсолютно верны и правдивы.

3. Страховые компании и банки могут продавать через приложение свои продукты. И никаких расходов, которые связаны с традиционными, оффлайновыми каналами продаж – не нужно собирать документы, приглашать человека в офис, достаточно разработать скрипт для колл-центра.

4. Для пользователя верификация с ЕСИА повышает доверие к сервису и делает саму процедуру удобнее – не нужно помнить дополнительные пароли, просто нажимаешь знакомую кнопку и всё.

В наших проектах интеграция ЕСИА активно используется в продуктах страховых компаний. Это позволяет клиентам покупать полисы ОСАГО, отправлять извещения о ДТП при оформлении заявок на урегулирование убытков. Это критически важная функция для сценариев заявления о страховых случаях по ОСАГО, когда пользователь не является клиентом данной страховой компании.

Больше проверок:  Мораторий на проверки бизнеса в 2024 году

Хотя сейчас к ЕСИА могут подключиться не все организации, можно ожидать, что такая авторизация скоро станет де-факто стандартом для пользовательских сервисов. Просто потому, что это надёжно и удобно для клиентов – вместо отдельной учётной записи для каждого ресурса можно использовать единый аккаунт «Госуслуг» и бесшовно пользоваться любыми нужными услугами. Поэтому задумываться об интеграции стоит всем компаниям.

Ответы на частые вопросы о подключении организации к ЕСИА

Официальные инструкции запутанны и сложны для восприятия, так что мы подготовили FAQ по теме
интеграции с ЕСИА на основе вопросов, которые чаще всего задают наши клиенты.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Правила безопасности и конфиденциальности

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

В то же время не нужно забывать, что безопасность определяется не только защищенностью базы, но и рабочего места. Пользователи должны следовать рекомендациям:

  • использовать лицензированное ПО
  • регулярно производить рекомендуемые обновления безопасности
  • использовать качественное антивирусное обеспечение
  • не входить на портал из общественных и незнакомых источников
  • не разглашать логины, пароли, ПИН-коды доступа

3 минуты – 3 дня

МФК «Лайм-Займ» (ООО)

ООО МФК «Вэббанкир»

ООО МКК «Академическая»

Как зарегистрировать организацию в ЕСИА

Процедура начинается с юридических формальностей. Прежде всего, необходимо выбрать ответственное лицо —
администратора IT-системы, которая будет работать с ЕСИА. В этой роли может выступать руководитель
организации или его доверенное лицо. Администратор подтверждает личность через портал госуслуг
и регистрирует там организацию.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Затем администратор оформляет квалифицированную
электронную подпись
и вносит новую IT-систему в особый регистр. Эта процедура подробно
изложена в детальном руководстве.

После регистрации IT-системе присваивается мнемоника — индивидуальный код-идентификатор. Он потребуется
техническим специалистам для дальнейшей настройки системы.

Перенаправление в ЕСИА и аутентификация

Начнем пошаговую реализацию с пунктов 1-4: нам нужно перенаправить пользователя на сервис аутентификации ЕСИА (EsiaAuthUrl). В зависимости от среды (тестовая или продуктив) различается базовый адрес url – для тестовой среды это https://esia-portal1.test.gosuslugi.ru/aas/oauth2/ac. Полный адрес получается таким:

{EsiaAuthUrl}?client_id={ClientId}&scope={Scope}&response_type=code&state={State}& timestamp={Timestamp}&access_type=online&redirect_uri={RedirectUri}&client_secret={ClientSecret}

где RedirectUri – адрес, на который будет направлен ответ от ЕСИА, а ClientSecret – результат выполнения функции GetClientSecret. Остальные параметры описаны ранее.

Преимущества подтвержденного аккаунта

Что же касается подтверждения аккаунта, то делать это нужно обязательно если хотите реально иметь возможность использовать услуги портала. Анонимно граждане не обслуживаются, только на основании подтвержденных документов, это позволяет быстро провести идентификацию без обращения в уполномоченные органы. Благодаря регистрации, граждане получают возможность оплачивать различные госпошлины и штрафы со скидкой от портала. А для пенсионеров появляется возможность контролировать свои счета по начислениям от ПФ и узнавать актуальную информацию о нововведениях.

Не хотите, чтобы накопления полностью съела инфляция? Открывайте вклады с высокими процентами. Телеграм-бот Сравни Вклады подскажет, какие ставки сейчас доступны в российских банках. Подпишитесь на бот, чтобы получить подборку спецпредложений с дополнительными бонусами и подарками для вкладчиков. 

Как зарегистрироваться в личном кабинете Госуслуги?

Восстановление пароля

Восстановить пароль от учетной записи довольно просто. Для этого под формой ввода данных от аккаунта кликаем на гиперссылку “Не знаю пароль” и система предложит способы восстановления его через мобильный, путем ввода паспортных данных, номера СНИЛС или ИНН.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

После внесения нужной информации на зарегистрированный в системе мобильный будет отправлен пароль для единоразового входа. Затем его нужно будет сменить в настройках. Процедура восстановления доступа может занять не более 15 минут.

Мобильное приложение личного кабинета ЕСИА

Мобильное приложение разработано для мобильных устройствах на разных платформах.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

С помощью приложения возможно:

  • получать информацию о событиях (изменение статусов заявлений, информация о штрафах и задолженности, прием к врачу, время смены паспорта и множество другой информации)
  • подстроиться под каталог услуг в зависимости от региона
  • подать заявление на получение заграничного и гражданского паспорта
  • запросить выписку по пенсионному счету
  • заказать справку об отсутствии судимости
  • зарегистрировать автомобиль
  • оформить водительское удостоверение
  • оплатить задолженности и штрафы

Кто может подключиться к ЕСИА

ЕСИА создавалась, чтобы облегчить предоставление государственных услуг, так что интеграция с этим
сервисом доступна всем государственным учреждениям. Помимо них, такая привилегия выдана нескольким разновидностям
юридических лиц, занимающихся коммерческой деятельностью.

Интегрироваться с ЕСИА могут:

Типы учетных записей на сайте Госуслуги

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

  1. Если пройти формальную регистрацию с вводом имени и фамилии, мобильного и почты, гражданину будет присвоен статус Упрощенной УЧ.
  2. После внесения паспортных данных и номера СНИЛС – будет присвоен статус Стандартной УЗ.
  3. После регистрации в МФЦ, уполномоченном банке или получения пароля через Почту России, гражданин получает УЗ с Подтвержденным статусом.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

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

Для получение каких-либо данных в ЕСИА нам нужно получить токен доступа. Для этого формируем POST запрос в ЕСИА (для тестовой среды базовый url такой: https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te — EsiaTokenUrl). Основные поля запроса тут формируются аналогичным образом, в коде получается примерно следующее:

/// <summary>
/// Получить токен доступа
/// </summary>
/// <param name="code">Код доступа для получения кода доступа</param>
/// <param name="callbackUrl">Коллбек адрес для редиректа после автризации</param>
/// <param name="certificate">Сертификат для подписи запросов</param>
/// <returns>Токен доступа</returns>
public async Task<EsiaAuthToken> GetAccessToken(
	string code,
	string callbackUrl = null,
	X509Certificate2 certificate = null)
{
	var timestamp = DateTime.UtcNow.ToString("yyyy.MM.dd HH:mm:ss +0000");
	var state = Guid.NewGuid().ToString("D");

	// Create signature in PKCS#7 detached signature UTF-8
	var clientSecret = GetClientSecret(
		certificate,
		Configuration.Scope,	// Скоуп запроса
		timestamp,
		Configuration.ClientId,	// Идентификатор ИС
		state);

	var requestParams = new List<KeyValuePair<string, string>>
	{
		new KeyValuePair<string, string>("client_id", Configuration.ClientId),
		new KeyValuePair<string, string>("code", code),
		new KeyValuePair<string, string>("grant_type", "authorization_code"),
		new KeyValuePair<string, string>("state", state),
		new KeyValuePair<string, string>("scope", Configuration.Scope),
		new KeyValuePair<string, string>("timestamp", timestamp),
		new KeyValuePair<string, string>("token_type", "Bearer"),
		new KeyValuePair<string, string>("client_secret", clientSecret),
		new KeyValuePair<string, string>("redirect_uri", callbackUrl)
	};
	using (var client = new HttpClient())
	using (var response = await client.PostAsync(Configuration.EsiaTokenUrl, new FormUrlEncodedContent(requestParams)))
	{
		response.EnsureSuccessStatusCode();
		var tokenResponse = await response.Content.ReadAsStringAsync();

		var token = JsonConvert.DeserializeObject<EsiaAuthToken>(tokenResponse);

		Argument.NotNull(token?.AccessToken, "Не найден токен доступа");
		Argument.Require(state == token.State, "Идентификатор запроса некорректный");

		return token;
	}
}

Некоторые статичные параметры запроса получаем из файла конфигурации (поле Configuration). Как мы можем видеть, поле code запроса заполняется значением кода аутентификации, полученным ранее. Для десериализации ответа используется следующие классы:

/// <summary>
/// Ответ от ЕСИА с токеном доступа
/// </summary>
public class EsiaAuthToken
{
	/// <summary>
	/// Токен доступа
	/// </summary>
	[JsonProperty("access_token")]
	public string AccessToken { get; set; }

	/// <summary>
	/// Идентификатор запроса
	/// </summary>
	public string State { get; set; }

	/// <summary>
	/// Хранилище данных в токене
	/// </summary>
	public EsiaAuthTokenPayload Payload
	{
		get
		{
			if (string.IsNullOrEmpty(AccessToken))
			{
				return null;
			}

			string[] parts = AccessToken.Split('.');
			if (parts.Length < 2)
			{
				throw new System.Exception($"При расшифровке токена доступа произошла ошибка. Токен: {AccessToken}");
			}

			var payload = Encoding.UTF8.GetString(Base64UrlEncoder.Decode(parts[1]));
			return JsonConvert.DeserializeObject<EsiaAuthTokenPayload>(payload);
		}
	}
}

/// <summary>
/// Данные из токена доступа
/// </summary>
public class EsiaAuthTokenPayload
{
	/// <summary>
	/// Идентификатор токена
	/// </summary>
	[JsonProperty("urn:esia:sid")]
	public string TokenId { get; set; }

	/// <summary>
	/// Идентификатор пользователя
	/// </summary>
	[JsonProperty("urn:esia:sbj_id")]
	public string UserId { get; set; }
}

Сколько пользователей в ЕСИА

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

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Согласно отчету Ростелеком, сервисом пользуется
больше 80 миллионов человек — каждый второй житель России.

Как информационная система работает с ЕСИА

ЕСИА является прослойкой между стандартным содержанием приложения и его защищёнными данными. Если пользователю не требуются услуги, которые требуют верификации личности, он может не проходить дополнительную авторизацию. Когда же он захочет попасть в этот раздел, приложение переадресует его на Портал госуслуг, а после успешной авторизации – вернёт обратно.

Технически процесс выглядит так:

1. Пользователь обращается к защищённому ресурсу информационной системы (например, при онлайн-покупке полиса ОСАГО).

2. Информационная система направляет в ЕСИА запрос на аутентификацию.

4. После успешной аутентификации ЕСИА передаёт в информационную систему пакет с идентификационными данными пользователя, информацию об уровне его учётной записи и контексте аутентификации.

5. На основании этой информации система открывает пользователю доступ.

Как организации подключиться к ЕСИА

Процедура подключения занимает около месяца. Это время включает регистрацию необходимых аккаунтов, получение данных от Минцифры, работы по интеграции ИС.

1. Зарегистрируйте руководителя организации на Портале госуслуг. Регистрировать компании в ЕСИА могут только те их представители, которые вправе действовать без доверенности. Им понадобится подтверждённая учётная запись физического лица – т.е. нужно будет не только указать свои данные, но и обратиться в банк или МФЦ для верификации. В последнее время многие банки позволяют сделать это онлайн, через их приложения.

2. Зарегистрируйте вашу организацию.

a. Получите квалифицированную электронную подпись (КЭП) на руководителя организации.

b. Зарегистрируйте юридическое лицо в профиле ЕСИА.

c. Оформите КЭП для юридического лица.

Больше проверок:  Сведения из реестра экспертных организаций

Оформлением КЭП занимаются аккредитованные удостоверяющие центры. Подробная инструкция по этому процессу здесь.

3. Зарегистрируйте информационную систему в ЕСИА.

Регистрация системы происходит через технологический портал. Доступ к нему может получить один из сотрудников компании – действовать через аккаунт представителя уже не обязательно. Этот процесс подробно расписан в Руководстве пользователя технологического портала ЕСИА. В результате регистрации информационная система заносится в реестр ИС и получает мнемонический буквенно-цифровой код.

4. Доработайте систему для обмена данными с ЕСИА.

Аутентификация пользователей в ЕСИА происходит по OAuth 2.0 и OpenID Connect 1.0. Компании необходимо сгенерировать закрытый ключ и сертификат открытого ключа, зарегистрировать его на технологическом портале. Стоит отметить, что ЕСИА поддерживает только российские алгоритмы шифрования ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012.

Стоит отдельно отметить, что если в компании уже используются средства верификации пользователей посредством Single Sign-On, то особых технических трудностей при подключении к ЕСИА не будет.

5. Подключитесь к тестовой среде ЕСИА

6. Подключитесь к промышленной среде ЕСИА

Какие данные можно получать из ЕСИА

Для организаций, зарегистрированных в ЕСИА, этот список составляют типовые реквизиты: наименование,
юридический адрес, ОГРН, код ОКПО и т.д. Кроме того, при создании учетной записи присваивается один
из трех статусов, отражающих ее надежность.

Государственные органы, с разрешения владельца учетной записи, могут получить всю информацию
из аккаунта, но для коммерческих организаций доступ ограничен. Им доступны данные
о подтвержденности аккаунта, ФИО пользователей и часть паспортных данных.

Какие бывают учетные записи в ЕСИА

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Каждый новый пользователь сервиса первоначально получает «упрощенную» учетную запись с ограниченными
возможностями. Когда пользователь указывает правильные паспортные данные или СНИЛС, аккаунт проходит проверку
со стороны государственных органов, и учетной записи присваивается статус — «стандартная». Для получения
«подтвержденного» аккаунта его владелец должен пройти идентификацию при помощи авторизованного интернет-банка
 или лично посетив МФЦ.

Получение данных пользователя из ЕСИА

Имея токен доступа и идентификатор пользователя можно получить данные о пользователе из ЕСИА. Рассмотрим пример получения ФИО пользователя и его организации. Для этого формируем GET запрос в REST API ЕСИА, для тестового контура базовый url (EsiaRestUrl) будет таким: https://esia-portal1.test.gosuslugi.ru/rs. Токен доступа передается в заголовке запроса, сам код выглядит следующим образом:

/// <summary>
/// Получить данные пользователя
/// </summary>
/// <param name="userId">Идентификатор пользователя</param>
/// <param name="accessToken">Токен доступа</param>
/// <returns>Данные пользователя</returns>
public async Task<EsiaUser> GetUser(string userId, string accessToken)
{
	using (var client = new HttpClient())
	{
		client.DefaultRequestHeaders.Clear();
		client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

		var response = await client.GetStringAsync($"{Configuration.EsiaRestUrl}/prns/{userId}?embed=(organizations)");
		var user = JsonConvert.DeserializeObject<EsiaUser>(response);
		user.Id = user.Id ?? userId;

		return user;
	}
}

Этот метод принимает на вход идентификатор пользователя в ЕСИА и токен доступа – оба эти параметра мы получили на предыдущем этапе. Заметьте, запрос можно расширить и наряду с ФИО пользователя получить список его организаций. В этом случае мы получим список ссылок на организации пользователя, по которым можно будет получить данные в свою очередь. Таким образом, у нас получилась такая модель пользователя ЕСИА:

/// <summary>
/// Пользователь ЕСИА
/// </summary>
public class EsiaUser
{
	/// <summary>
	/// Идентификатор
	/// </summary>
	[JsonProperty("oid")]
	public string Id { get; set; }

	/// <summary>
	/// Фамилия
	/// </summary>
	[JsonProperty("firstName")]
	public string FirstName { get; set; }

	/// <summary>
	/// Имя
	/// </summary>
	[JsonProperty("lastName")]
	public string LastName { get; set; }

	/// <summary>
	/// Отчество
	/// </summary>
	[JsonProperty("middleName")]
	public string MiddleName { get; set; }

	/// <summary>
	/// Подтвержден ли пользователь
	/// </summary>
	[JsonProperty("trusted")]
	public bool Trusted { get; set; }

	/// <summary>
	/// Ссылки на организации
	/// </summary>
	[JsonProperty("organizations")]
	public EsiaUserOrganizations OrganizationLinks { get; set; }
}

/// <summary>
/// Ссылки на организации
/// </summary>
public class EsiaUserOrganizations
{
	[JsonProperty("elements")]
	public List<string> Links { get; set; }
}

Личный кабинет ЕСИА

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

Функционал личного кабинета ЕСИА

Авторизация в личном кабинете ЕСИА

Мобильное приложение личного кабинета ЕСИА

Клиентская поддержка через кабинет

Правила безопасности и конфиденциальности

Как подключить сайт организации или другую IT-систему к ЕСИА

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

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Сертификат передается государству. В ответ Минкомсвязи высылает разрешение на тестовый доступ
к сервису и данные для пробного подключения.

Далее следуют работы по разработке и настройке коннектора между IT-системой организации
инфраструктурой сервиса. Разработчикам предстоит научить их взаимодействовать между собой — принимать
и отправлять запросы в автоматическом режиме. Минкомсвязи даст разрешение на полноценный запуск
IT-системы только после того, как коннектор стабильно заработает в тестовом режиме.

Какой протокол использовать для подключения к ЕСИА и чем он отличается
от стандартов

Для интеграции сайта или IT-системы с ЕСИА используется сочетание авторизации по OAuth 2.0 и аутентификации при помощи OpenID Connect. Это распространенные решения с подробной
документацией и многочисленными примерами использования, но применить их для интеграции
с сервисом «как есть» не получится.

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Хотя создатели сервиса в целом придерживались стандартных спецификаций, им пришлось разработать
собственный Application Programming Interface для приема электронных подписей. Чтобы подключение
к ЕСИА было успешным, стандартным библиотекам OpenID/OAuth необходима ручная доработка.

Какой сертификат нужен для регистрации системы в ЕСИА
и обязательно ли использовать ГОСТ-криптографию?

В октябре 2019 года Минкомсвязи обновило методические
рекомендации
, исключив из них
упоминания стандарта шифрования RSA (Rivest, Shamir и Adleman) и самоподписанных сертификатов.
Их использование больше не допускается.

Теперь российские алгоритмы шифрования ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012 —
единственные стандарты, которые доступны для использования с ЕСИА.

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

Какие готовые решения можно использовать для подключения

В отдельных отечественных системах управления сайтами предусмотрены инструменты для подключения
к ЕСИА, но переносить сайт на новую CMS ради интеграции с порталом госуслуг
нецелесообразно, и, зачастую, попросту невозможно.

Универсальное решение — библиотеки с открытым исходным кодом. С их помощью можно обеспечить
работу с сервисом для любой IT-системы, но для их настройки требуются технические навыки. Мы
предпочитаем использовать Open Source компоненты, однако дорабатываем и адаптируем их для каждого
проекта.

Можно ли подключить к ЕСИА мобильное приложение

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript

Да, но в приложение должен быть интегрирован браузер. Он необходим только для авторизации,
так что все остальные операции с приложением можно реализовать через обычный интерфейс. Например,
так функционируют приложения «Госуслуги» и «Почта России».

Сколько времени уходит на подключение к ЕСИА

Формальная сторона процедуры, включающая регистрацию аккаунтов и ожидание мнемонического кода
от Минкомсвязи, обычно занимает около недели.

На работы по настройке коннектора для базового подключения требуется две — три недели.
В случаях, когда необходимо получение данных из аккаунта ЕСИА и дальнейшая их обработка,
срок увеличивается.

Сколько стоит подключение

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

Практика показывает, что интеграция силами штатных сотрудников IT-отдела компании удается
не всегда. Настройку интеграции сайта или иной IT-системы с ЕСИА лучше доверить опытной
команде, которая неоднократно выполняла эту процедуру. Стоимость работ специалистов варьируется
в зависимости от сложности системы и масштабов проекта.

Базовая информация

Мы реализовали сервис интеграции с ЕСИА под Windows, используя КриптоПро CSP. В теории скорее всего можно это все аккуратно упаковать в docker и положить в Linux-образные системы, оставим это на откуп читателю. Для нас же актуальным стеком был следующий:

  • .Net Framework 4.8
  • КриптоПро CSP, КриптоПро .Net
  • Сертификат с закрытым ключом, полученный при регистрации ИС в реестре ИС ЕСИА (на пункте 1 из Введения)

Каждый запрос в ЕСИА по соображениям безопасности дополняется полем client_secret, которое формируется как открепленная подпись 4 полей запроса в формате UTF-8:

  • Scope (Скоуп запроса, перечень данных, которые нужно получить из ЕСИА). Например, «fullname gender email mobile usr_org»
  • Timestamp (Текущие дата и время в формате «yyyy.MM.dd HH:mm:ss +0000»)
  • ClientId (Идентификатор ИС, который выдается при регистрации системы в ЕСИА)
  • State (Идентификатор текущего запроса, каждый раз генерируется как Guid.NewGuid().ToString(«D»))

private string GetClientSecret(
	X509Certificate2 certificate, 
	string scope, 
	string timestamp, 
	string clientId, 
	string state)
{
	var signMessage = Encoding.UTF8.GetBytes($"{scope}{timestamp}{clientId}{state}");

	byte[] encodedSignature = SignatureProvider.Sign(signMessage, certificate);
 
	return Base64UrlEncoder.Encode(encodedSignature);
}

Тут SignatureProvider – класс для реализации работы с сертификатами, он довольно просто реализуется. Для подписи использовался алгоритм ГОСТ – импортозамещение и все такое.

Функционал личного кабинета ЕСИА

Регистрация в личном кабинете позволяет аккумулировать информацию обо всех услугах, которые вы когда-либо получали – обращения, заявления, платежи. Через личный кабинет можно следить за тем, как рассматривается ваша заявка, контролировать ее статус, настраивать уведомления об изменениях, отслеживать статус платежей.

Для чего ЕСИА коммерческим компаниям

Для негосударственных организаций сервис открывает новые возможности, не связанные с получением
персональных данных.

Заключение

Пожалуй, этого достаточно для базового сценария взаимодействия с ЕСИА. В целом, если знать особенности реализации, программное подключение системы к ЕСИА не займет более 1 дня. Если у вас появятся вопросы, добро пожаловать в комменты. Спасибо, что дочитали мой пост до конца, надеюсь, он будет полезен.

Авторизация в личном кабинете ЕСИА

Как интегрировать авторизацию через госуслуги (ЕСИА) с помощью Docker и Typescript