Взаимодействие с «1С:Шиной»

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

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

Установка модулей криптографии на сервере «1С:Шины»

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

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

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

Это можно сделать в панели управления:
  • Откройте панель управления;
  • Нажмите Пользователи и затем нажмите на список пользователей вашего приложения;
  • В меню списка пользователей нажмите Сервисы внешних учетных записей:
  • Нажмите + Добавить сервис > ЕСИА:
  • Заполните характеристики ЕСИА:
    Примечание: Поддерживается API только первой версии, без указания версии в URL. Например:
    • Идентификатор информационной системы (ИдКлиента) — это мнемоника системы;
    • Имя хранилища КЭП в КриптоПро JCP (ПсевдонимЗаписиЗакрытогоКлюча) — это алиас КЭП.
    • Идентифицировать по (ИдентифицироватьПо) — это возможные методы идентификации пользователя по данным из ЕСИА. Указанные значения не должны быть шире того scope, на который дано разрешение от ЕСИА. По значению данного поля как раз таки будет подобран scope при входе пользователя.
  • Нажмите Добавить.

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

метод ДобавитьЕСИАВСписокПользователей(СП: СписокПользователей): СписокПользователей
    пер НовыеНастройки = новый Множество<НастройкиСервисаУчетныхЗаписей>(СП.НастройкиСервисаУчетныхЗаписей)
     
    // Создадим новый сервис ЕСИА и его настройки
    пер СервисЕсиа = новый СервисУчетныхЗаписей(ВидСервисаУчетныхЗаписей.Есиа)
    пер НастройкиСервисаЕсиа = новый НастройкиСервисаУчетныхЗаписейЕсиа(СервисЕсиа, "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С:Шина» сообщит, что учетная запись добавлена:
  • Учетная запись появится в списке учетных записей пользователя:

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

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

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

    // Получаем текущее описание
    пер ОписаниеПользователя = ПользователиСервиса.Найти(ИдПользователя)
    пер СписокПользователей = СпискиПользователей.Найти(ОписаниеПользователя.Ид.ИдСписка)
    пер ЕсиаСервис = НайтиВключенныйСервисЕСИА(СписокПользователей)
    
    // ПочтаЕсиа — это почта, к которой привязан пользовательский аккаунт к Госуслугам (ЕСИА). 
    // После того как пользователь в первый раз зайдет через ЕСИА, id будет заменен на id из ЕСИА
    // Snils — это СНИЛС пользователя
    пер УчЗапись = новый УчетнаяЗаписьЕсиа(ЕсиаСервис)
    УчЗапись.АдресПочты = ПочтаЕсиа
    
    // Например: "000-000-000 06"
    УчЗапись.Снилс = СнилсПользователя
 
    пер ОписаниеСЕсиа = ОписаниеПользователя.СУчетнойЗаписьюЕсиа(УчЗапись)
 
    // обновляем пользователя
    ПользователиСервиса.Изменить(ОписаниеСЕсиа)
;
 
метод НайтиВключенныйСервисЕСИА(СП: СписокПользователей): УчетнаяЗапись
    для Настройки из СП.НастройкиСервисовУчетныхЗаписей
        если Настройки.Сервис.Вид == ВидСервисаУчетныхЗаписей.Есиа and Настройки.Включено
            возврат Настройки.Сервис
    ;
    выбросить новый ИсключениеНедопустимоеСостояние("Нет включенного сервиса учетных записей ЕСИА")
;