Перейти к основному содержимому

Добавление сервиса учетных записей ЕСИА

Контрольный список

К этому моменту у вас должно быть следующее:

  • КЭП для ИС;
  • КриптоПро JCP с подключенной КЭП;
  • мнемоника системы и определенный scope;
  • ИС, настроенная в технологической консоли ЕСИА.

Установка модулей криптографии

Установите модули криптографии, как указано здесь.

Добавление ЕСИА как сервиса учетных записей

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

Это можно сделать в панели управления:

  1. Откройте панель управления.

  2. Нажмите Пользователи и затем нажмите на список пользователей вашего приложения.

  3. В меню списка пользователей нажмите Сервисы внешних учетных записей:

    Выбор пункта меню «Сервисы внешних учетных записей»

  4. Нажмите + Добавить сервисЕСИА:

    Выбор ЕСИА в списке сервисов учетных записей

  5. Заполните характеристики ЕСИА:

    Заполнение характеристик ЕСИА

    примечание

    Поддерживается API только первой версии, без указания версии в URL. Например:

    • Идентификатор информационной системы (ИдКлиента) — это мнемоника системы;

    • Имя хранилища КЭП в КриптоПро JCP (ПсевдонимЗаписиЗакрытогоКлюча) — это алиас КЭП.

      Имя хранилища КЭП в КриптоПро JCP

    Добавление сервиса внешних учетных записей

    • Идентифицировать по (ИдентифицироватьПо) — это возможные методы идентификации пользователя по данным из ЕСИА. Указанные значения не должны быть шире того scope, на который дано разрешение от ЕСИА. По значению данного поля как раз таки будет подобран scope при входе пользователя.
  6. Нажмите Добавить.

Также это можно сделать из встроенного языка, заполнив данные экземпляра НастройкиСервисаУчетныхЗаписейЕсиа.

метод ДобавитьЕСИАВСписокПользователей(СП: СписокПользователей): СписокПользователей
пер НовыеНастройки = новый Множество<НастройкиСервисаУчетныхЗаписей>(СП.НастройкиСервисаУчетныхЗаписей)

// Создадим новый сервис ЕСИА и его настройки
пер СервисЕсиа = новый СервисУчетныхЗаписей(ВидСервисаУчетныхЗаписей.Есиа)
пер НастройкиСервисаЕсиа = новый НастройкиСервисаУчетныхЗаписейЕсиа(СервисЕсиа, "Esia")

// Настроим адреса для тестовго контура ЕСИА (без указания версии API)
НастройкиСервисаЕсиа.АдресАвторизации = "https://server.example.com/aas/oauth2/ac"
НастройкиСервисаЕсиа.АдресТокена = "https://server.example.com/aas/oauth2/te"
НастройкиСервисаЕсиа.АдресПользовательскойИнформации = "https://server.example.com/rs/prns/"

// Добавим в дополнительные настройки client_id информационной системы.
// client_id для каждого приложения для разных ЮЛ свой
НастройкиСервисаЕсиа.ИдКлиента = GetInformationSystemClientId()

// Укажем тип хранилища в КриптоПро JCP
НастройкиСервисаЕсиа.ВидХранилищаКлючей = "HDImageStore"

// Хранилище без пароля
НастройкиСервисаЕсиа.ПарольХранилищаКлючей = ""

// Укажем псевдоним (алиас) записи с сертификатом и закрытым ключом для ИС в КриптоПро JCP
НастройкиСервисаЕсиа.ПсевдонимЗаписиЗакрытогоКлюча = "<Псевдоним контейнера ключа КЭП из КриптоПро JCP>"

// Если приватный ключ под паролем (а можно не задавать пароль при создании), то добавим также и его
пер Пароль = GetPasswordForPrivateKey()
если не Пароль.Пусто()
НастройкиСервисаЕсиа.ПарольЗакрытогоКлюча = Пароль
;

// Пользователя можно идентифицировать по СНИЛС или почте
НастройкиСервисаЕсиа.ИдентифицироватьПо = ["snils", "email"]

// Добавим сертификат для декодирования и проверки ответов из ЕСИА,
// который можно взять по ссылке http://esia.gosuslugi.ru/public/esia.zip
// Поле не обязательно к установке
если GetEsiaResponseCertificate() != Неопределено
НастройкиСервисаЕсиа.СертификатДляОтветовЕсиа = GetEsiaResponseCertificate()
;

// Добавим к остальным сервисам
НовыеНастройки.Добавить(НастройкиСервисаЕсиа)

// Вернем новый список пользователей
пер НовыйСП = СП.CНастройкамиСервисовУчетныхЗаписей(НовыеНастройки)
СпискиПользователей.Изменить(НовыйСП)
возврат НовыйСП
;

Пользовательская учетная запись ЕСИА

совет

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

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

дополнительно

Пользователь должен иметь подтвержденный аккаунт в ЕСИА, контакты также должны быть подтверждены.

В данные, которые необходимо внести в аккаунт ЕСИА, могут входить:

  • адрес электронной почты,
  • телефон,
  • СНИЛС,
  • ИНН.
совет

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

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

  1. Откройте панель управления.

  2. Нажмите Пользователи и затем нажмите на список пользователей вашего приложения.

  3. Нажмите на нужного пользователя.

  4. В разделе Учетные записи нажмите + Добавить.

  5. Выберите подключенный сервис ЕСИА и нажмите Добавить:

  6. Заполните параметры внешней учетной записи и нажмите Добавить:

  7. «1С:Шина» сообщит, что учетная запись добавлена:

  8. Учетная запись появится в списке учетных записей пользователя:

Также это можно сделать из встроенного языка:

метод ДобавитьПользователюЕСИА(ПользовательСсылка: Пользователи.Ссылка, 
ПочтаЕсиа: Строка,
СнилсПользователя: Строка)

// Получаем идентификатор по ссылке
пер ИдПользователя = ПользовательСсылка.ЗагрузитьОбъект().Ид

// Получаем текущее описание
пер ОписаниеПользователя = ПользователиСервиса.Найти(ИдПользователя)
пер СписокПользователей = СпискиПользователей.Найти(ОписаниеПользователя.Ид.ИдСписка)
пер ЕсиаСервис = НайтиВключенныйСервисЕСИА(СписокПользователей)

// ПочтаЕсиа — это почта, к которой привязан пользовательский аккаунт к Госуслугам (ЕСИА).
// После того как пользователь в первый раз зайдет через ЕСИА, id будет заменен на id из ЕСИА
// Snils — это СНИЛС пользователя
пер УчЗапись = новый УчетнаяЗаписьЕсиа(ЕсиаСервис)
УчЗапись.АдресПочты = ПочтаЕсиа

// Например: "000-000-000 06"
УчЗапись.Снилс = СнилсПользователя

пер ОписаниеСЕсиа = ОписаниеПользователя.СУчетнойЗаписьюЕсиа(УчЗапись)

// обновляем пользователя
ПользователиСервиса.Изменить(ОписаниеСЕсиа)
;

метод НайтиВключенныйСервисЕСИА(СП: СписокПользователей): СервисУчетныхЗаписей
для Настройки из СП.НастройкиСервисовУчетныхЗаписей
если Настройки.Сервис.Вид == ВидСервисаУчетныхЗаписей.Есиа and Настройки.Включено
возврат Настройки.Сервис
;
выбросить новый ИсключениеНедопустимоеСостояние("Нет включенного сервиса учетных записей ЕСИА")
;