62 lines
6.7 KiB
Plaintext
62 lines
6.7 KiB
Plaintext
|
|
|
|||
|
|
Эта документация описывает архитектуру созданной системы Single Sign-On (SSO) для сети сайтов con-med.ru. Система построена по принципу Identity Provider (IdP) и Service Provider (SP).
|
|||
|
|
1. Общая архитектура
|
|||
|
|
Мастер-сервер (auth.con-med.ru): «Паспортный стол». Здесь хранятся все учетные записи, пароли и основные группы (специальности).
|
|||
|
|
Личный кабинет (id.con-med.ru): Основной интерфейс пользователя. Здесь происходит регистрация и редактирование профиля (данные транзитом улетают на мастер-сервер).
|
|||
|
|
Сайты-потребители (vebinar, content): Проверяют авторизацию через мастер-сервер.
|
|||
|
|
Сервер статистики (stat): Собирает логи действий пользователей со всех площадок.
|
|||
|
|
2. Модуль сервера: conmed.authserver
|
|||
|
|
Где лежит: auth.con-med.ru → /local/modules/conmed.authserver/
|
|||
|
|
Файловая структура:
|
|||
|
|
lib/api.php: Фасад системы, собирающий функционал из трейтов.
|
|||
|
|
lib/securitytrait.php: Валидация паролей, проверка ключей сайтов (хеши), Rate Limiting.
|
|||
|
|
lib/authtokentrait.php: Логика OAuth 2.0 (выдача кодов, токенов, Refresh токенов).
|
|||
|
|
lib/registrationtrait.php: Регистрация новых пользователей.
|
|||
|
|
lib/profiletrait.php: Обновление ФИО, города, телефона и мульти-специальностей.
|
|||
|
|
lib/groupstrait.php: Отдача списка специальностей (группы с C_SORT = 555).
|
|||
|
|
/api/oauth/: Точки входа для внешних запросов (user.php, token.php и т.д.).
|
|||
|
|
Ключевые особенности:
|
|||
|
|
Безопасность: Секретные ключи сайтов хранятся в виде BCRYPT-хешей.
|
|||
|
|
IDOR Protection: Пользователь может менять только свой профиль (проверка по Access Token).
|
|||
|
|
Агент: Раз в сутки запускается Api::cleanLogsAgent() для очистки старых логов.
|
|||
|
|
3. Модуль клиента: conmed.sso
|
|||
|
|
Где лежит: Все сайты, кроме auth → /local/modules/conmed.sso/
|
|||
|
|
Файловая структура:
|
|||
|
|
lib/auth.php: Основной класс. Реализует метод Authorize() (вход по коду) и AuthorizeByToken().
|
|||
|
|
lib/interceptor.php: «Тихий страж». На событии OnProlog проверяет наличие куки CONMED_REFRESH. Если сессия Битрикса истекла, он незаметно обновляет её через сервер.
|
|||
|
|
lib/helper.php: Синхронизация групп (сопоставление по STRING_ID).
|
|||
|
|
/ajax/sso_handler.php: Единственный прокси-файл для всех AJAX-запросов фронтенда. Использует локальное кеширование специальностей (24ч).
|
|||
|
|
Компоненты:
|
|||
|
|
conmed:sso.auth: Модальное окно входа и регистрации.
|
|||
|
|
conmed:sso.profile: Личный кабинет с табами, мульти-выбором специальностей, поиском и списком дипломов.
|
|||
|
|
4. Инструкции по эксплуатации
|
|||
|
|
Как добавить новый сайт в систему
|
|||
|
|
На сервере auth в настройках модуля conmed.authserver добавьте строку:
|
|||
|
|
ID_САЙТА : ЛЮБОЙ_ПАРОЛЬ : https://domain.ru
|
|||
|
|
Нажмите «Сохранить» (пароль превратится в хеш).
|
|||
|
|
Скопируйте папку модуля conmed.sso на новый сайт.
|
|||
|
|
Установите модуль в админке нового сайта.
|
|||
|
|
В настройках модуля введите ID_САЙТА и тот самый ПАРОЛЬ.
|
|||
|
|
Подключите компонент conmed:sso.auth в футере шаблона.
|
|||
|
|
Как добавить новую специальность
|
|||
|
|
На сервере auth создайте группу пользователей.
|
|||
|
|
Установите ей Сортировку = 555.
|
|||
|
|
Обязательно задайте Символьный идентификатор (латиницей).
|
|||
|
|
Список на всех сайтах обновится автоматически (в течение 24 часов из-за кеша или мгновенно после его очистки).
|
|||
|
|
Как работает связка пользователей
|
|||
|
|
Система ищет совпадения в следующем порядке:
|
|||
|
|
XML_ID (равен ID на сервере auth).
|
|||
|
|
Если не нашли — LOGIN (для склейки старых записей).
|
|||
|
|
Если не нашли — EMAIL.
|
|||
|
|
Это гарантирует отсутствие дублей даже при переносе старой базы 200к+ пользователей.
|
|||
|
|
5. Технический журнал (Где смотреть логи)
|
|||
|
|
Мастер-сервер: HL-блок SsoAudit (успешные действия) и SsoSecurityLog (ошибки/атаки).
|
|||
|
|
Сайт ID: Файл /sso_final.log (отладка входа) и /sso_client_debug.log (отладка прокси).
|
|||
|
|
Дипломы: HL-блок UserDiplomas на сайте id.con-med.ru.
|
|||
|
|
6. TODO (План развития)
|
|||
|
|
Сайт статистики: Разместить на stat.con-med.ru HL-блок и файл-приемщик для функции sendStatToHub.
|
|||
|
|
Email-уведомления: Настроить на сервере auth почтовые события, чтобы при смене пароля или регистрации через API пользователю уходило письмо.
|
|||
|
|
Webhook удаления: Добавить логику: если пользователь удаляется на auth, отправлять запрос на id для блокировки локальной записи.
|
|||
|
|
Синхронизация Аватаров: Добавить в API передачу PERSONAL_PHOTO через base64 или прямую ссылку.
|
|||
|
|
Массовая миграция: Запустить /local/tools/diplom_import.php для переноса оставшихся 200 000 дипломов (рекомендуется делать пачками по ночам).
|
|||
|
|
Документация актуальна на февраль 2026 года.
|