Розробка модуля авторизації та реєстрації 1С-Бітрікс
Стандартний компонент авторизації bitrix:system.auth.form закриває більшість завдань, але бізнес регулярно приходить із вимогами, що виходять за його межі: вхід за номером телефону з OTP, авторизація через державні сервіси ідентифікації, багатофакторна аутентифікація, єдиний вхід для кількох сайтів, кастомні поля реєстрації з верифікацією. Кастомний модуль авторизації — відповідь на ці вимоги.
Як працює авторизація в Бітрікс
Бітрікс надає кілька точок розширення системи авторизації:
Соціальна авторизація реалізована через модуль socialservices. Провайдери розширюються через клас, що наслідує \Bitrix\SocialServices\Base. Для нестандартних провайдерів (Telegram, державні портали) створюється власний клас.
Авторизація за токеном / API-ключем — через обробник події OnBeforeUserLogin або через middleware в OnPageStart.
Подійна модель: ключові події для розширення авторизації:
-
OnBeforeUserLogin— до авторизації (можна заборонити) -
OnAfterUserLogin— після успішного входу -
OnUserLoginAttempt— при кожній спробі (для логування, rate limiting) -
OnBeforeUserRegister— до реєстрації -
OnAfterUserRegister— після успішної реєстрації
Авторизація за номером телефону з OTP
Найчастіший запит. Схема роботи:
- Користувач вводить номер телефону
- Сервер генерує OTP-код (6 цифр), зберігає в сесію або кеш із TTL 5 хвилин
- Відправляє SMS через провайдера (Infobip, SMS.ru, Twilio)
- Користувач вводить код
- Сервер верифікує код, шукає користувача за полем
UF_PHONEабоPERSONAL_PHONE, логінить черезCUser::Authorize($userId)
// Верифікація OTP та авторизація
public function verifyOtp(string $phone, string $code): bool
{
$session = Application::getInstance()->getSession();
$stored = $session->get('otp_' . md5($phone));
if (!$stored || $stored['code'] !== $code || $stored['expires'] < time()) {
return false;
}
$session->delete('otp_' . md5($phone));
// Знайти користувача за телефоном
$user = UserTable::getRow([
'filter' => ['=PERSONAL_PHONE' => $phone, '=ACTIVE' => 'Y'],
'select' => ['ID'],
]);
if ($user) {
CUser::Authorize($user['ID']);
return true;
}
// Авторееєстрація якщо потрібно
return $this->autoRegister($phone);
}
Інтеграція з державними сервісами ідентифікації
Авторизація через державні портали використовує протокол OAuth 2.0 + OpenID Connect. Особливості:
- Потрібна реєстрація інформаційної системи в реєстрі відповідного відомства
- Необхідне використання PKCS#7/GOST-R підпису запитів (криптографічна бібліотека або OpenSSL з відповідними алгоритмами)
- Тестове середовище доступне за окремим URL
Інтеграція реалізується як провайдер авторизації, що наслідує \Bitrix\SocialServices\Base, або як окремий обробник із redirect URI.
Єдиний вхід (SSO) для кількох сайтів
При мультисайтовій конфігурації Бітрікс підтримує SSO через механізм «Сховище сесій». Для сайтів на різних доменах — реалізується через:
- Спільний домен другого рівня (
.example.ua) із cookie на домен - OAuth2-сервер на основному сайті + клієнти на дочірніх
- JWT-токени в URL-параметрах для крос-доменного переходу
Двофакторна аутентифікація (2FA)
2FA реалізується через обробник OnAfterUserLogin:
public static function onAfterUserLogin(array &$params): void
{
$userId = $params['USER_ID'];
if (self::is2FAEnabled($userId)) {
// Зберегти прапор «потрібна 2FA» у сесії
$session = Application::getInstance()->getSession();
$session->set('2fa_required', true);
$session->set('2fa_user_id', $userId);
// Вийти з поточної сесії та перенаправити на сторінку введення коду
CUser::Logout();
LocalRedirect('/auth/2fa/');
}
}
TOTP (Time-based One-Time Password за RFC 6238) — стандартний алгоритм для сумісності з Google Authenticator та аналогічними застосунками.
Кастомні поля реєстрації
Поля реєстраційної форми розширюються через користувацькі поля UF_* модуля user. Специфічні завдання:
- Верифікація ідентифікаційних кодів при реєстрації юрособи — через API податкових органів або сторонні сервіси перевірки
- Підтвердження email через унікальне посилання — стандартний механізм Бітрікс + кастомізація листа
- Завантаження документів при реєстрації — через
UF_-поля типу «файл» із модерацією
Типові терміни розробки
| Функціональність | Термін |
|---|---|
| OTP-авторизація за телефоном | 1–2 тижні |
| Соціальна авторизація (2–3 провайдери) | 1–2 тижні |
| 2FA (TOTP) | 1 тиждень |
| Авторизація через державний портал | 3–5 тижнів |
| SSO для кількох сайтів | 2–4 тижні |
| Комплексний модуль (все разом) | 6–10 тижнів |
Модуль тестується на відповідність вимогам безпеки: захист від брутфорсу (rate limiting), захист від CSRF, коректне завершення сесій, зберігання токенів у хешованому вигляді.







