© 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.
Поля в окне редактирования параметров системы
Шаг 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;
- наличие активной компоненты json;
- наличие активной компоненты curl;
- наличие активной компоненты posix;
Модуль авторизации принимает на вход набор параметров, описанных в таблице А.1.
Таблица А.1 - Описание параметров
Пример массива, задающего минимально необходимый набор конфигурационных параметров для модуля, приведен ниже.
$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. | адрес электронной почты, указанный в учетной записи | + | |
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 | Данные присвоенных организации видов деятельности | - |