OAuth (Open Authorization) — способ авторизации через сторонний сервис. Пользователь разрешает приложению использовать свои учётные данные — например, имя и email. При этом пароль от аккаунта не передаётся. Доступ к данным осуществляется по специальным правилам, которые поддерживает и приложение, и сервис. В BILLmanager реализован Authorization Code Flow из спецификации OAuth 2.0.
Логика работы
Модуль позволяет BILLmanager работать с внешними плагинами для Oauth. В статье в качестве примера используется интеграция с Яндекс — https://github.com/ISPsystemLLC/billmanager/tree/master/oauth/yandex , однако вы можете использовать другой плагин.
Авторизация происходит в два этапа. Пользователь отправляет внешнему сервису данные: например, имя и email. Сервис генерирует временный код авторизации и передаёт его BILLmanager. Затем BILLmanager обменивает полученные данные на информацию о профиле. Основные шаги:
- Пользователь выбирает вход через OAuth-сервис (например, Яндекс) на странице авторизации BILLmanager.
- BILLmanager перенаправляет пользователя на страницу авторизации стороннего сервиса.
- Пользователь проходит аутентификацию в стороннем сервисе.
- После успешного входа сервис перенаправляет пользователя обратно в BILLmanager с временным кодом авторизации.
- BILLmanager:
- обменивает полученный временный код на токен доступа.
- запрашивает данные профиля пользователя.
Структура модуля
Модуль состоит из следующих компонентов:
- XML-файл описания плагина xml/billmgr_mod_omyandex.xml — регистрирует метод авторизации в системе и определяет элементы интерфейса для настройки:
- Регистрация плагина:
<plugin name="yandex"> <group>oauth</group> </plugin>
plugin
— элемент, регистрирующий модуль в системе;name="yandex"
— внутреннее имя метода авторизации;group="oauth"
— указывает, что модуль относится к группе OAuth-провайдера.
- Метаданные: Настройки провайдера
<metadata name="project.edit" type="form" mgr="billmgr"> <form> <page name="auth"> <field name="auth_method_yandex" after="custom_methods"> <input type="toggle" name="auth_method_yandex"/> </field> </page> </form> </metadata>
- Настройка добавляет переключатель (
toggle
) на странице настроек провайдера, позволяющий включить или отключить вход через Яндекс.
Параметры пользователя<metadata name="usrparam" type="form"> <form> <page name="socnetwork"> <field name="yandex_status"> <input type="checkbox" name="yandex_status"> <if value="on" hide="yandex_signup"/> <if value="off" hide="yandex_status"/> </input> </field> <field name="yandex_signup"> <link name="yandex_signup_link" target="_self" referrer="yes"/> </field> </page> </form> </metadata>
usrparam
— форма параметров пользователя;socnetwork
— вкладка «Социальные сети» в профиле пользователя;yandex_status
— поле позволяет привязать или отвязать аккаунт Яндекс;yandex_signup
— ссылка для привязки аккаунта.
- Настройка добавляет переключатель (
- Регистрация плагина:
- Python-скрипт oauth/omyandex.py — реализует логику взаимодействия с OAuth-провайдером. Должен уметь обрабатывать команды :
make_url
— формирует URL для перенаправления пользователя на страницу внешней авторизации;Пример вызова командыget_user_data
— выполняет обмен кода на токен и запрашивает данные пользователя.
Пример вызова команды
Обязательные параметры:
firstname
— имя пользователя;lastname
— фамилия пользователя;realname
— полное имя (например, "Иван Иванов");email
— email-адрес;id
— уникальный идентификатор пользователя из внешней системы.
Имя файла должно начинаться с префиксаom
, а оставшаяся часть имени должна соответствовать внутреннему названию метода авторизации из XML-файла. Расширение.py
отбрасывается при установке. - Иконки методов авторизации. Файлы размещаются в директориях тем оформления. Имя файла совпадает с внутренним названием метода авторизации из XML-файла. Поддерживается формат
.svg
.- dist/skins/common/img/yandex.svg
- dist/skins/dragon/default/yandex.svg
Пример реализации модуля
Интеграция на стороне Яндекс
Чтобы настроить авторизацию на стороне Яндекс ID:
- Перейдите на страницу регистрации приложений Яндекс OAuth.
- Укажите:
- Имя сервиса и Почту для связи.
- Платформы приложения: Веб-сервис.
- Redirect URI : https://example.com/billmgr?func=oauth.save.userdata&network=yandex
- Запрашиваемые права:
- Доступ к электронному адресу.
- Доступ к логину, имени, фамилии и полу.
- Сохраните полученные
CLIENT_ID
иCLIENT_SECRET
и укажите их в oauth/omyandex.py.
Подробнее о настройке на стороне Яндекс см. в документации Яндекс ID.
Пример настроек
Интеграция на стороне BILLmanager
Чтобы настроить авторизацию на стороне BILLmanager:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Установите необходимые пакеты разработки :
илиUbuntu, Astra Linuxapt install coremanager-dev billmanager-corporate-dev billmanager-plugin-python-libs
Репозитории подключаются автоматически при установке платформы.AlmaLinuxyum install coremanager-devel billmanager-corporate-devel billmanager-plugin-python-libs
- Поместите файлы модуля в директорию /usr/local/mgr5/src/:
cp -r /путь/к/вашему/модулю /usr/local/mgr5/src/yandex
/путь/к/вашему/модулю
— путь к вашему модулю;yandex
— название модуля OAuth.
- Перейдите в директорию проекта:
cd /usr/local/mgr5/src/yandex
yandex
— название модуля OAuth.
- Соберите и установите модуль:
make install

Пример страницы авторизации с установленными модулями Яндекс, VK, Google