Files
conmed-authserver/local/modules/conmed.authserver/man.txt
2026-03-06 19:26:11 +03:00

62 lines
6.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Эта документация описывает архитектуру созданной системы 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 года.