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, 5.0.3

Что нового

Username может быть e-mail

Добавлено
Стало возможно использовать email пользователя как username при использовании SSO. На стороне Joomla обычно для этого используются сторонние плагины. На стороне Moodle необходимо использовать параметр Разрешить использовать адрес электронной почты в качестве логина - authloginviaemail

SSO: log out

Добавлено
При выходе из Joomla пользователь одновременно выходит из Moodle. Для этого установите версию плагина аутентификации jmoodle 1.1.0 (20240409)

Рефакторинг кода

Изменено
Код стал проще и надёжнее

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

78 Всего расширений
11 Категорий
332 Выпущено версий
312619 Всего скачиваний
Корзина
Корзина пуста