Разработка модуля авторизации и регистрации 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)
- Пользователь вводит код
- Сервер верифицирует код, ищет пользователя по полю
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.ru) с 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 ФНС или dadata.ru
- Подтверждение email через уникальную ссылку — стандартный механизм Битрикс + кастомизация письма
- Загрузка документов при регистрации — через
UF_поля типа файл с модерацией
Типичные сроки разработки
| Функциональность | Срок |
|---|---|
| OTP-авторизация по телефону | 1–2 недели |
| Социальная авторизация (2–3 провайдера) | 1–2 недели |
| 2FA (TOTP) | 1 неделя |
| Авторизация через Госуслуги (ЕСИА) | 3–5 недель |
| SSO для нескольких сайтов | 2–4 недели |
| Комплексный модуль (всё вместе) | 6–10 недель |
Модуль тестируется на соответствие требованиям безопасности: защита от брутфорса (rate limiting), защита от CSRF, корректное завершение сессий, хранение токенов в хешированном виде.







