WT JMoodle User sync
- Категории: Плагины Joomla, Расширения для Joomla 4 и Joomla 5, Moodle
- Версия: 1.1.0
- Дата:
Плагин для синхронизации пользователей Joomla и Moodle. Single Sing On (SSO) для Joomla и Moodle.

Описание
Прежде всего хочу упомянуть уже существующее решение этой же задачи - компонент Joomdle. Это расширение рассматривалось как возможный способ решения задачи интеграции Joomla и Moodle, в том числе и единого входа. Некоторые подходы затем были в нём "подсмотрены" (лицензия GPL это позволяет).
Однако, Joomdle появился примерно в 2008-2009 году и с тех пор мало изменился внутри. Под капотом этого компонента код, использующий (на момент написания этого текста в январе 2024 года) методы ещё Joomla 1.6-2.5. Это означает, что на Joomla 5 он если и будет работать без ошибок, то только с плагином обратной совместимости. А на Joomla 6 работать уже не будет. Разработчиком заявлена работоспособность компонента на Joomla 4.
Поскольку кодовая база у компонента и сопутствующих плагинов довольно большая, то его обновление до современных стандартов Joomla вряд ли произойдёт скоро, если произойдёт вообще. Также нужно учитывать, что Moodle тоже не стоял на месте и в нём есть довольно развитый REST API, в то время как Joomdle использовал свою точку входа в LMS Moodle в обход REST API. Так исторически сложилось из-за того, что Joomdle добавлял свой функционал возможно до того, как он же появился в REST API Moodle.
Поэтому было принято решение по созданию библиотеки WT JMoodle library для работы с Moodle REST API из Joomla, а также по созданию плагинов для решения различных задач по работе с Moodle из Joomla, которые будут использовать эту библиотеку.
Зависимости плагина
Плагин требует установленную и настроенную библиотеку для интеграции Joomla 4 / Joomla 5 и Moodle - WT JMoodle library.
Возможности плагина
- создание пользователя Moodle при создании или самостоятельной регистрации пользователя Joomla
- обновление данных пользователя Moodle при обновлении данных пользователя Joomla. Пока что синхронизируются стандартные данные пользователя: имя, логин, пароль и т.д. Маппинг пользовательских полей пока не реализован.
- удаление пользователя Moodle при удалении пользователя Joomla
- SSO - Single Sign On - единый вход для обоих движков (на cookies). Опционально.
Синхронизация пользователей Joomla 4 / Joomla 5 и Moodle 4.3
Синхронизация данных происходит автоматически в момент действий над пользователями в Joomla. В базе данных находится таблица связей пользователей Joomla и Moodle, которая создаётся при установке библиотеки WT JMoodle. На стороне Moodle для внешней службы нужно разрешить использование методов core_user_create_users
, core_user_update_users
, core_user_delete_users
.
Проверить, доступны ли они для текущей конфигурации Вы можете в плагине User - WT JMoodle User sync.

Также общий список доступных методов для работы Joomla с Moodle через REST API можно посмотреть в плагине System - WT JMoodle library.

SSO (Single Sign On) для Joomla и Moodle
Введение
Технология единого входа используется теми компаниями, у которых несколько сайтов и сервисов для своих пользователей. Мы все привыкли к тому, что Google, Yandex, VK (Mail.ru) и другие крупные сайты позволяют нам использовать одну и ту же учётную запись (аккаунт) для всех своих сервисов (почта, рекламный кабинет, социальная сеть и т.д.). Обычно под задачи хранения учётных данных пользователя, авторизации (вход / выход) и взаимодействия с другими сервисами компании выделяется отдельный сервис (сайт) который называется Identity portal. На схеме ниже он обозначен SSO.

И в таком случае, если у нас только 2 сайта (Joomla и Moodle), то для управления пользователями нужно поднимать ещё один сайт-портал - identity portal. В случае, если сайтов только 2, такое решение будет скорее избыточным и проще настроить прямую синхронизацию данных между двумя движками. Если же предполагается перспектива роста до нескольких самостоятельных сервисов, то в таком случае нужно настраивать классический SSO.
Данный плагин - решение для прямой интеграции Joomla и Moodle без использования Identity portal, не является по своей сути классическим SSO, но предоставляет этот функционал.
Схема единого входа для Joomla 5 и Moodle 4.3 при использовании плагина WT JMoodle user sync
При логине пользователя на стороне Joomla авторизация на стороне Moodle происходит по следующей схеме:
- При авторизации пользователя в Joomla плагин на событие onUserAfterLogin отправляет запрос в плагин аутентификации WT JMoodle auth на стороне Moodle. Запрос включает в себя токен, созданный для Moodle REST API и указанный в настройках библиотеки WT JMoodle.
- Плагин аутентификации WT JMoodle auth на стороне Moodle проверяет:
- не пустой ли токен в запросе
- создан ли токен для внешней службы, id которой указан в настройках плагина WT JMoodle auth на стороне Moodle.
- Сравнивает совпадает ли токен в запросе с токеном в базе данных для данной внешней службы.
- Проверяет, существует ли указанный в запросе пользователь в Moodle.
- Если все предыдущие проверки пройдены успешно, плагин WT JMoodle auth на стороне Moodle делает в свою очередь запрос в Joomla для проверки, а действительно ли запрашиваемый пользователь авторизован в Joomla? В запросе так же содержится токен для веб-службы.
- Joomla проверяет вошёл ли этот пользователь в систему и даёт ответ Moodle.
- На стороне Moodle плагин аутентификации получает ответ от Joomla и если пользователь действительно залогинился в Joomla - авторизовывает пользователя на стороне Moodle и посылает cookie Joomla.
- Таким образом происходит одновременный вход на обоих сайтах.

Настройки cookie domain для того, чтоб SSO работало
Для того, чтобы эта схема авторизации работала Moodle и Joomla должны находиться на одном домене 2-го уровня. Обычно сайт на Joomla находится на основном домене 2-го уровня, например site.ru
. Существует 2 варианта местонахождения Moodle:
- На поддомене вида
moodle.site.ru
. - В подпапке основного сайта:
site.ru/moodle
.
В случае если Moodle находится в подпапке - cookie, выданные обоими системами браузером будут восприниматься как cookie одного сайта. В то время как site.ru
и moodle.site.ru
- разные сайты и файлы cookie одного не будут доступны для другого.
Однако, в обеих системах - и в Joomla и в Moodle есть параметр в настройках "домен cookie". В обоих движках нужно указать в этом параметре домен 2-го уровня, например, site.ru
.

Если Joomla находится на домене 2-го уровня, а Moodle - на поддомене, то можно на стороне Joomla не указывать данный параметр. Если же Joomla тоже находится на поддомене, то эта настройка обязательна. Пройдите в левом меню Система / Общие настройки / Вкладка Сайт / в самом низу страницы.

Joomla
- Тип расширения:
- Плагин
- Каталог:
- User
- Версия Joomla:
- 5.0.0, 5.0.3