img3

© 2014 - 2024 esia.pro

Инструкция по интеграции модуля авторизации через ЕСИА (Bitrix)

1 Общее описание

Модуль авторизации для CMS Bitrix реализует набор функций написанных на языке программирования PHP и позволяющих организовывать взаимодействие с сервисами Единой системы идентификации и аутентификации (ЕСИА) по протоколу OAuth 2.0. Подробную информацию о данном протоколе и принципах взаимодействия с ЕСИА можно получить в методических рекомендациях по использованию ЕСИА

Важно учесть, что модуль авторизации поставляется в 2-х версиях базовой и расширенной. Основным отличием расширенной версии от базовой является возможность получения дополнительного набора сведений о пользователе (см. Приложение Б - Перечень запрашиваемых областей доступа). Условия поставки базовой или расширенной версии необходимо обговаривать заранее с Вашим персональным менеджером.

2 Перечень поставляемых файлов

В состав файлов, поставляемых с модулем, входят следующие:

  • RndsEsiaOAuth2.php – модуль инициализации библиотеки авторизации через ЕСИА;
  • component.php – модуль, реализующий основную логику работы компоненты Битрикс;
  • fns – директория, содержащая модули реализующие функциональность компоненты;
  • lib – директория библиотеки авторизации через ЕСИА;
  • lib/OAuth2 – директория, в которой содержатся файлы библиотеки авторизации;
  • lib/Keys – директория, в которой должны размещаться ключ и сертификат ИС (генерируются на стороне клиента ЕСИА);
  • lib/Temp – директория, в которую модуль кладет временные файлы;
  • lib/Log – директория лог-файлов.

3 Функции модуля

Основными функциями модуля авторизации являются:

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

Дополнительными функциями модуля авторизации являются:

  • объединение учётных записей пользователей Bitrix с учётными записями пользователей ЕСИА;
  • авторизация пользователей в Bitrix без получения данных из защищённого хранилища ЕСИА;
  • получение данных пользователей из защищённого хранилища ЕСИА без авторизации на стороне Bitrix;
  • создание сессионного пользователя на стороне Bitrix;
  • редирект пользователей с неподтверждённой УЗ в специальный раздел без авторизации;
  • обновление данных пользователя авторизуемого через ЕСИА;
  • добавление только подтверждённых данных в профиль пользователя авторизуемого через ЕСИА;
  • авторизация пользователей ЕСИА с разными видами учётных записей (стандартная, подтверждённа);
  • определение группы или групп пользователей, в которые будет добавлен пользователь после создания его УЗ на стороне Bitrix;
  • использование разных средств подписания запросов направляемых в адреса сервисов ЕСИА. К таким средствам относятся openssl (установленный как локально, так и на удалённом сервере), Сайнер (сервис подписания запросов).

4 Интеграция библиотеки

Перед началом интеграции необходимо:

  • выполнить конфигурирование OpenSSL, подключив gost-engine с поддержкой алгоритмов ГОСТ Р 34.10-2012 и ГОСТ Р 34.11- 2012. Если подписание происходит на стороне сервиса Signer (Jigner), то OpenSSL настраивать не нужно;
  • настроить для вашей системы HTTPS (это обязательное требование, поскольку данные между вашей системой и ЕСИА передаются в открытом виде);
  • выполнить экспорт ключевой пары (сформированной по ГОСТ2012) из криптоконтейнера (экспорт можно сделать с помощью нашей утилиты);
  • настроить систему на технологическом портале тестовой/промышленной ЕСИА. На технологическом портале в окне редактирования параметров системы (см. рисунок 1) указать URL возврата после авторизации и логаута, а также установить алгоритм подписания запросов GOST3410_2012_256.

Для интеграции библиотеки необходимо выполнить следующие шаги описанные ниже.

Шаг 0. Установить необходимые зависимости, описанные в разделе 5.

Шаг 1. Распаковать архив с модулем в рабочей директории, в которую он должен быть установлен. Например, это может быть bitrix/components/rnds

Шаг 2. В директорию по умолчанию lib/Keys/GOST3410_2012_256 в рабочем каталоге библиотеки авторизации положить ключ и сертификат (с именами secret.key и cert.crt соответственно) в PEM формате (для извлечения ключа и сертификата из криптоконтейнера можно воспользоваться нашей утилитой), сформированные по ГОСТ2012 с длиной ключа 256 бит, и удостовериться, что тот же сертификат загружен на технологическом портале тестовой/промышленной ЕСИА. Если имена и директория файлов ключа и сертификата не соответствуют значениям по-умолчанию необходимо указать полный путь для них в параметрах OAuth2PkeyPath и OAuth2CertPath.

Шаг 3. В директорию по умолчанию lib/Keys/GOST3410_2012_256 в рабочем каталоге компоненты положить файл сертификата ЕСИА в PEM формате с именем esia-test.crt или esia-prod.crt в зависимости от окружения (тестовое/промышленное), в котором запускается код. Окружение устанавливается с помощью параметра OAuth2IsTestEnvironment. Если имя или директория файла сертификата не соответствуют значениям по-умолчанию необходимо указать полный путь в параметре OAuth2EsiaCertPath.

img1

img2

Поля в окне редактирования параметров системы

Шаг 4. ВАЖНО!!! Настроить доступ к директориям для размещения файлов сертификата, ключа и логов компоненты таким образом, чтобы их файлы нельзя было получить извне.

Шаг 5. При необходимости создать группу для пользователей авторизуемых через ЕСИА. Группа может называться, например, “Пользователи ЕСИА”. В дальнейшем, при настройке компоненты, понадобиться ID группы. Если создавать отдельную группу для пользователей авторизуемых через ЕСИА необходимости нет, то нужно выбрать какую-либо группу пользователей из списка существующих и при настройке компоненты использовать ее ID.

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

$APPLICATION->IncludeComponent(
	"rnds",
	".default", 
	Array(/*параметры компоненты см. в приложении А*/),
	False
);

Если подключение компоненты прошло успешно, то должна появиться кнопка “Войти”.

Шаг 7. Добавить раздел для передачи логаут запроса (выход) в ЕСИА. В данном разделе подключить компоненту, используя следующий код:

$APPLICATION->IncludeComponent(
	"rnds",
	".default", 
	Array(/*параметры компоненты см. в приложении А*/),
	False
);

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

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

5 Зависимости

Модуль авторизации предъявляет следующие требования к среде исполнения требования к версии CMS Bitrix

Bitrix 14.5 или выше

языковые требования

PHP 5.5 или выше

В окружении модуля авторизации должна присутствовать утилита

OpenSSL v.1.1.x

которую можно вызвать посредством системного вызова.

OpenSSL должна поддерживать алгоритмы ГОСТ2012. Для этого необходимо установить расширение

Gost-engine

Необходимо наличие

Grep

В случае использования сервиса подписания запросов Signer (Jigner) его необходимо развернуть и настроить к нему доступ со стороны системы, в которую интегрируется библиотека.

Для работы модуля авторизации необходимо:

  • наличие активной компоненты openssl;

openssl

  • наличие активной компоненты json;

json

  • наличие активной компоненты curl;

curl

  • наличие активной компоненты posix;

posix


ПРИЛОЖЕНИЕ А
Описание конфигурационных параметров

Модуль авторизации принимает на вход набор параметров, описанных в таблице А.1.

Таблица А.1 - Описание параметров

Наименование параметра Описание параметра
1 OAuth2Site URL системы - поставщика услуг (ЕСИА)
2 OAuth2LogoutUri Определяет адрес возврата в ИС после логаута пользователя в ЕСИА
3 OAuth2AuthUri Определяет адрес возврата в ИС после авторизации пользователя в ЕСИА
4 OAuth2ClientId Мнемоника, полученная при регистрации ИС в минкомсвязи
5 OAuth2Scope Перечень областей данных, к которым предоставляется доступ для ИС после авторизации
6 OAuth2CertPath Путь к файлу сертификата, содержащему публичный ключ ИС
7 OAuth2PkeyPath Путь к файлу, содержащему приватный ключ ИС
8 OAuth2OpensslPath Полный путь к утилите OpenSSL (для Windows)
9 OAuth2IsDebug Включение/отключение режима отладки
10 OAuth2AccessType Определяет тип доступа к защищенному хранилищу ЕСИА предоставляемому для ИС
11 OAuth2ResponseType Определяет тип ответа ЕСИА при запросе авторизации со стороны ИС
12 OAuth2RefreshTokenUri  определяет URL обработчика токена обновления
13 OAuth2CryptoAlg Определяет крипграфический алгоритм, используемый для подписания запросов
14 OAuth2PrivateKeyPwd Определяет пароль, используемый для закрытой части ключа
15 OAuth2UseCurl Определяет способ передачи запросов через cURL
16 OAuth2EsiaCertPath Путь к файлу, содержащему сертификат ЕСИА
17 OAuth2UserAccountTypes Задаётся как массив значений и определяет уровень доверия к учётной записи пользователя. Может принимать значения OAuth2Configuration::USER_ACCOUNT_SIMPLIFIED, OAuth2Configuration::USER_ACCOUNT_STANDARD, OAuth2Configuration::USER_ACCOUNT_CONFIRMED. Если указано значение OAuth2Configuration::USER_ACCOUNT_SIMPLIFIED то авторизацию будут проходить все пользователи зарегистрированные в ЕСИА, OAuth2Configuration::USER_ACCOUNT_STANDARD определяет уровень доверия только для стандартных УЗ, а значение OAuth2Configuration::USER_ACCOUNT_CONFIRMED позволяет проходить авторизацию пользователям только с подтверждённой УЗ.
18 OAuth2UseBackgroundAuth Определяет возможность проверки наличия аутентификации пользователей на стороне ЕСИА в фоновом режиме
19 OAuth2GetDataType Определяет в каком виде модуль будет передавать данные клиентской системе. Возможные значения OAuth2Configuration ::OAUTH2_GET_JSON, OAuth2Configuration ::OAUTH2_GET_ARRAY
20 OAuth2StrObjARE Принимает JSON, ранее полученный от ЕСИА в результате запроса токена доступа
21 OAuth2IsTestEnvironment Принимает значения TRUE/FALSE в зависимости от окружения, в котором выполняется код модуля
22 OAuth2RequestIdentityTokenOnly Принимает значения TRUE/FALSE и определяет необходимость авторизации и получения данных пользователя из защищённого хранилища ЕСИА и их последующего добавления в учётную запись на стороне Битрикс (при значении FALSE) или только авторизацию пользователя через ЕСИА (при значении TRUE) без отправления запроса данных из ЕСИА (УЗ на стороне Битрикс создаётся на основе идентификатора пользователя, полученного из маркера идентификации ЕСИА).
23 OAuth2UserGroupsId Группы пользователей, в которые будет добавлен пользователь ЕСИА. Задаётся в виде массива (array)
24 OAuth2UnTrustedUserRedirectURI Определяет адрес раздела ИС, в котором содержится информация для пользователей не прошедших авторизацию по причине её несоответствия заданному уровню доверия УЗ
25 OAuth2CreateSessionUser Позволяет создавать и авторизовать временного пользователя (для хранения служебных данных в его сессии) до авторизации пользователя ЕСИА
26 OAuth2UpdateAuthUser Определяет необходимость обновления содержимого учетных записей пользователей при каждой авторизации через ЕСИА
27 OAuth2ShowInterface Определяет необходимость отображения кнопки “ВОЙТИ”/”ВЫЙТИ” для компоненты
28 OAuth2LinkingAccounts Принимает значения ‘Y’/’N’ и определяет необходимость связывания учётных записей пользователя в Битрикс и ЕСИА. Связывание происходит на основе значений полей EMAIL или PERSONAL_MOBILE. Если система не может запросить данные скоупов email и mobile, то учётные записи можно объединять на основе авторизационных параметров пользователя Битрикс. Для этого параметр OAuth2LinkingAccByUserCred должен быть установлен в значение TRUE.
29 OAuth2ResetUserActions Принимает значения TRUE/FALSE и определяет необходимость удаления записей о пользовательских событиях в таблице b_user_auth_action. Такая необходимость может возникать в некоторых случаях, когда после смены пароля Битрикс требуется повторная авторизация через некоторое время, но необходимо, чтобы после авторизации через ЕСИА пользователь был авторизован немедленно. ВНИМАНИЕ!!! Недостатком использования этого параметра является то, что в action логе Битрикс будут удалены данные о попытках авторизации или изменения авторизационных параметров пользователя с заданным ID.
30 OAuth2SaveUserCredentials Принимает значения TRUE/FALSE и определяет необходимость сохранить текущие авторизационные параметры пользователя при объединении его текущей УЗ с УЗ ЕСИА. То есть пользователь сможет авторизоваться как через стандартную форму авторизации Битрикс, так и через ЕСИА.
31 OAuth2LinkingAccByUserCred Принимает значения TRUE/FALSE и определяет необходимость объединять учётные записи пользователя в Битрикс и ЕСИА на основе авторизационных данных пользователя. То есть в случае, когда система не получает email или номер телефона пользователя от ЕСИА или по этим данным не может его идентифицировать на стороне Битрикс - будет запрошен логин и пароль пользователя в Битрикс.
32 OAuth2DialogUri Определяет URL раздела, в рамках которого в интерактивном режиме будет выполняться объединение учётных записей пользователя.
33 OAuth2UpdateUserGroups Принимает значения Y/N и определяет необходимость обновления групп пользователя при авторизации. В результате обновления существующие группы пользователя будут заменены на группы, установленные в параметре OAuth2UserGroupsId
34 OAuth2SaveUserDataInSession Принимает значения Y/N. В случае задания значения N определяет необходимость создания учётной записи Битрикс с целью записи данных пользователя полученных из ЕСИА и последующей авторизацией в клиентской системе. В случае задания значения Y позволяет сохранять данные, полученные из ЕСИА, в гостевой сессии, не создавая учётной записи в Битрикс и не авторизуя пользователя. Для извлечения данных, сохранённых в сессии необходимо из глобального массива $_SESSION получить значение по ключу 'ESIA_DATA'. Данные в сессии хранятся в формате JSON.
35 OAuth2EsiaApiVersion Принимает значения v1 и v2. Определяет версию API, по которой будет происходить взаимодействие с ЕСИА. По умолчанию версия API v2.
36 OAuth2EsiaHashAlgorithm Определяет алгоритм, используемый для вычисления хэша сертификата. Допустимые значения 'sha1', 'md_gost94', 'md_gost12_256', 'md_gost12_512'.
ВАЖНО! чтобы алгоритм вычисления хэша сертификата совпадал с алгоритмом хэширования использованным при формировании ключевой пары ЭЦП.
37 OAuth2EsiaCerCertPath Определяет путь к сертификату ЕСИА, конвертированному в DER. Если ничего не указано путь DER-сертификату будет совпадать с путем PEM-сертификата.
38 OAuth2FieldsForUpdateException Перечень стандартных полей Битрикс, которые будут исключены при обновлении сведений УЗ пользователя при получении данных из ЕСИА. Задаётся как массив (array).

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

Для тестовой среды ЕСИА:

$APPLICATION->IncludeComponent(
"rnds:rnds.esia.oauth",
".default",
Array(
   'OAuth2UserGroupsId'	=> array(7),
   'OAuth2LogoutUri'    	=> "http://besia.d.rnds.pro/OAUTH2/ACS/",
   'OAuth2AuthUri'           => "http://besia.d.rnds.pro/OAUTH2/SLO/",
   'OAuth2RefreshTokenUri'   => "http://besia.d.rnds.pro/OAUTH2/ACS?refresh_token=true",
   'OAuth2UnTrustedUserRedirectURI' => 'http://besia.d.rnds.pro/OAUTH2/UNAUTH/',
   'OAuth2ClientId'     	=> "RNDS",
   'OAuth2Scope'        	=> "openid fullname id_doc",
   'OAuth2IsDebug'      	=> TRUE,
   'OAuth2UseCurl'	       => TRUE,
   'OAuth2CreateSessionUser' => 'N',
   'OAuth2UpdateAuthUser'    => 'Y',
   'OAuth2ShowInterface'	=> 'Y',
   'OAuth2OnlyVerifyedData'  => 'Y'
),
false);

Для промышленной среды ЕСИА:

$APPLICATION->IncludeComponent(
"rnds:rnds.esia.oauth",
".default",
Array(
   'OAuth2UserGroupsId'	=> array(7),
   'OAuth2IsTestEnvironment' => FALSE,
   'OAuth2LogoutUri'    	=> "http://besia.d.rnds.pro/OAUTH2/ACS/",
   'OAuth2AuthUri'           => "http://besia.d.rnds.pro/OAUTH2/SLO/",
   'OAuth2RefreshTokenUri'   => "http://besia.d.rnds.pro/OAUTH2/ACS?refresh_token=true",
   'OAuth2UnTrustedUserRedirectURI' => 'http://besia.d.rnds.pro/OAUTH2/UNAUTH/',
   'OAuth2ClientId'     	=> "RNDS",
   'OAuth2Scope'        	=> "openid fullname id_doc",
   'OAuth2IsDebug'      	=> TRUE,
   'OAuth2UseCurl'	       => TRUE,
   'OAuth2CreateSessionUser' => 'N',
   'OAuth2UpdateAuthUser'    => 'Y',
   'OAuth2ShowInterface'	=> 'Y',
   'OAuth2OnlyVerifyedData'  => 'Y'
),
false);

ПРИЛОЖЕНИЕ Б
Перечень запрашиваемых областей доступа

Таблица Б.2 - Перечень запрашиваемых областей доступа

Название scope Состав набора данных Запрашивается(+)/Не запрашивается(-)
1. fullname Просмотр фамилии, имени и отчества:
• фамилия;
• имя;
• отчество.
+
2. birthdate дата рождения, указанная в учетной записи +
3. gender пол, указанный в учетной записи +
4. snils СНИЛС, указанный в учетной записи +
5. inn ИНН, указанный в учетной записи +
6. id_doc Просмотр данных о документе, удостоверяющем личность:
• серия и номер документа, удостоверяющего личность;
• дата выдачи; • кем выдан;
• код подразделения;
• гражданство.
+
7. birthplace место рождения. +
8. medical_doc Просмотр данных полиса ОМС:
• номер полиса ОМС;
• срок действия.
+
9. military_doc Просмотр данных военного билета:
• серия и номер военного билета;
• дата выдачи;
• орган, выдавший документ.
+
10. foreign_passport_doc Просмотр данных заграничного паспорта:
• фамилия, имя, отчество буквами латинского алфавита;
• серия и номер заграничного паспорта;
• дата выдачи;
• срок действия;
• орган, выдавший документ;
• гражданство.
+
11. drivers_licence_doc Просмотр данных водительского удостоверения:
• серия и номер водительского удостоверения;
• дата выдачи;
• срок действия.
+
12. birth_cert_doc Просмотр данных свидетельства о рождении:
• серия и номер свидетельства;
• дата выдачи;
• место государственной регистрации.
+
13. residence_doc Просмотр данных вида на жительство:
• серия и номер вида на жительство;
• дата выдачи.
+
14. temporary_residence_doc Просмотр данных разрешения на временное проживание:
• серия и номер разрешения на временное проживание;
• дата выдачи.
+
15. vehicles Просмотр данных транспортных средств:
• государственный регистрационный знак;
• серия и номер свидетельства о регистрации.
+
16. email адрес электронной почты, указанный в учетной записи +
17. mobile номер мобильного телефона +
18. addresses Просмотр данных об адресах:
• адрес постоянной регистрации;
• адрес временной регистрации;
• адрес места проживания;
+
19. usr_org список организаций пользователя. +
20. usr_avt Просмотр изображения (аватара) пользователя:
• получения изображения (аватара);
• создание и обновление изображения (аватара);
• получение исходного изображения (аватара)
-
21. self_employed Просмотр данных о самозанятых:
• признак самозанятого;
• категория (вид деятельности).
-
22. kid_fullname Просмотр фамилии, имени и отчества:
• фамилия;
• имя;
• отчество.
+
23. kid_birthdate дата рождения ребенка +
24.. kid_gender Пол ребенка +
25. kid_snils СНИЛС ребенка +
26. kid_inn ИНН ребенка +
27. kid_birth_cert_doc Просмотр данных свидетельства о рождении:
• серия свидетельства;
• номер свидетельства;
• дата выдачи свидетельства;
• кем выдано свидетельство.
+
28. kid_medical_doc Просмотр данных полиса ОМС:
• номер полиса ОМС;
• действителен до ОМС.
+
1. org_shortname Сокращенное наименование организации -
2. org_fullname Полное наименование организации -
3. org_type Тип организации -
4. org_ogrn ОГРН организации -
5. org_inn ИНН организации -
6. org_leg ОПФ организации -
7. org_kpp КПП организации -
8. org_agencyterrange Территориальная принадлежность ОГВ -
9. org_agencytype Тип ОГВ -
10. org_oktmo ОКТМО организации -
11. org_ctts Контакты организации: номер телефона, номер факса, адрес электронной почты -
12. org_addrs Адреса организации (почтовый адрес, юридический адрес): индекс, идентификатор страны, адрес в виде строки (не включая дом, строение, корпус, номер квартиры), строение, корпус, дом, квартира, код ФИАС, регион,город, внутригородской район, район, поселение, доп. территория, улица на доп. территории, улица -
13. org_vhls Транспортные средства организации: название, государственный регистрационный знак, серия и номер свидетельства о регистрации -
14. org_grps Группы, владельцем которых является организация -
15. org_emps Данные о сотрудниках организации -
16. org_brhs Данные о филиалах организации (название, КПП, ОПФ, контакты, адреса) -
17. org_brhs_ctts Контакты филиалов организации -
18. org_brhs_addrs Адреса филиалов организации -
19. org_rcs Центры регистрации организации -
20. org_stms Системы, владельцем которых является организация -
21. org_invts Приглашения, направленные организацией -
22. categories Данные присвоенных организации видов деятельности -
  • Инструкция по интеграции модуля авторизации через ЕСИА (Bitrix)
  • 1 Общее описание
  • 2 Перечень поставляемых файлов
  • 3 Функции модуля
  • 4 Интеграция библиотеки
  • 5 Зависимости
  • ПРИЛОЖЕНИЕ А Описание конфигурационных параметров
  • ПРИЛОЖЕНИЕ Б Перечень запрашиваемых областей доступа