WT JMoodle User sync

WT JMoodle User sync

Плагин для синхронизации пользователей 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.

Плагины интеграции Moodle  и Joomla  в Joomla 5

В параметрах плагина wt jmoodle user sync можно посмотреть доступны ли нужные методы Moodle REST API
В параметрах плагина wt jmoodle user sync можно посмотреть доступны ли нужные методы Moodle REST API

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

В параметрах плагина wt jmoodle можно посмотреть все доступные методы Moodle REST API для данной интеграции
В параметрах плагина WT JMoodle можно посмотреть все доступные методы Moodle REST API для данной интеграции

SSO (Single Sign On) для Joomla и Moodle

Введение

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

Схема SSO
SSO на схеме - Identity portal.

И в таком случае, если у нас только 2 сайта (Joomla и Moodle), то для управления пользователями нужно поднимать ещё один сайт-портал - identity portal. В случае, если сайтов только 2, такое решение будет скорее избыточным и проще настроить прямую синхронизацию данных между двумя движками. Если же предполагается перспектива роста до нескольких самостоятельных сервисов, то в таком случае нужно настраивать классический SSO.

Данный плагин - решение для прямой интеграции Joomla и Moodle без использования Identity portal, не является по своей сути классическим SSO, но предоставляет этот функционал.

Схема единого входа для Joomla 5 и Moodle 4.3 при использовании плагина WT JMoodle user sync

Схема авторизации Joomla 5 и Moodle 4.3

При логине пользователя на стороне Joomla авторизация на стороне Moodle происходит по следующей схеме:

  1. При авторизации пользователя в Joomla плагин на событие onUserAfterLogin отправляет запрос в плагин аутентификации WT JMoodle auth на стороне Moodle. Запрос включает в себя токен, созданный для Moodle REST API и указанный в настройках библиотеки WT JMoodle.
  2. Плагин аутентификации WT JMoodle auth на стороне Moodle проверяет:
    1. не пустой ли токен в запросе
    2. создан ли токен для внешней службы, id которой указан в настройках плагина WT JMoodle auth на стороне Moodle.
    3. Сравнивает совпадает ли токен в запросе с токеном в базе данных для данной внешней службы.
    4. Проверяет, существует ли указанный в запросе пользователь в Moodle.
  3. Если все предыдущие проверки пройдены успешно, плагин WT JMoodle auth на стороне Moodle делает в свою очередь запрос в Joomla для проверки, а действительно ли запрашиваемый пользователь авторизован в Joomla? В запросе так же содержится токен для веб-службы.
  4. Joomla проверяет вошёл ли этот пользователь в систему и даёт ответ Moodle.
  5. На стороне Moodle плагин аутентификации получает ответ от Joomla и если пользователь действительно залогинился в Joomla - авторизовывает пользователя на стороне Moodle и посылает cookie Joomla. 
  6. Таким образом происходит одновременный вход на обоих сайтах.
Настройки плагина аутентификации WT JMoodle auth
Настройки плагина аутентификации WT JMoodle auth, который устанавливается в Moodle.

Настройки cookie domain для того, чтоб SSO работало

Для того, чтобы эта схема авторизации работала Moodle и Joomla должны находиться на одном домене 2-го уровня. Обычно сайт на Joomla находится на основном домене 2-го уровня, например site.ru. Существует 2 варианта местонахождения Moodle:

  1. На поддомене вида moodle.site.ru.
  2. В подпапке основного сайта: site.ru/moodle.

В случае если Moodle находится в подпапке - cookie, выданные обоими системами браузером будут восприниматься как cookie одного сайта. В то время как site.ru и moodle.site.ru - разные сайты и файлы cookie одного не будут доступны для другого.

Однако, в обеих системах - и в Joomla и в Moodle есть параметр в настройках "домен cookie". В обоих движках нужно указать в этом параметре домен 2-го уровня, например, site.ru.

 Параметр cookie domain в Moodle 4.3
Параметр cookie domain в Moodle 4.3

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

Параметр cookie domain в joomla 5
Параметр cookie domain в Joomla 5.

 

Joomla

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

Что нового

Первая версия расширения

Добавлено
Первая версия плагина.

Расширения Joomla WebTolk

77 Всего расширений
11 Категорий
318 Выпущено версий
295620 Всего скачиваний
Корзина
Корзина пуста