Initial commit: Auth Server Base
This commit is contained in:
62
local/modules/conmed.authserver/man.txt
Normal file
62
local/modules/conmed.authserver/man.txt
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
Эта документация описывает архитектуру созданной системы 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 года.
|
||||
Reference in New Issue
Block a user