Интеграция системы управления обучением Discourse (аутентификация LTI 1.3)

:discourse2: Краткое описание Discourse LTI позволяет Discourse интегрироваться с рядом систем управления обучением (LMS) через стандарт LTI 1.3.
:open_book: Руководство по установке Этот плагин встроен в ядро Discourse. Отдельная установка плагина не требуется.

Этот плагин реализует стандарт LTI 1.3 для аутентификации, который поддерживается рядом систем управления обучением. Discourse выступает в роли «Инструмента» (Tool) в рамках стандарта LTI. После настройки пользователи смогут нажать кнопку/ссылку в системе управления обучением и мгновенно войти в Discourse.

Точные инструкции по настройке будут зависеть от вашей системы управления обучением. Но в целом:

  1. Создайте новую запись «Инструмент» (Tool) в вашей системе управления обучением
  • Версия LTI: 1.3
  • URL запуска (Launch URL): любой URL на вашем сайте. Пользователи будут перенаправлены сюда после входа
  • URL запроса авторизации (Auth Request URL): https://<your-discourse-site>/auth/lti/initiate
  • URL перенаправления (Redirect URL): https://<your-discourse-site>/auth/lti/callback
  • Публичный ключ инструмента (Tool Public Key) — оставьте пустым. Discourse никогда не отправляет данные в LMS
  1. В вашей LMS найдите «Точка авторизации» (Authorization endpoint), «Идентификатор клиента инструмента» (Tool Client ID), «Идентификатор издателя платформы» (Platform Issuer ID) и «Публичный ключ платформы» (Platform Public Key) и добавьте их в соответствующие настройки сайта в Discourse. В Discourse настройки можно найти, введя lti в пользовательском интерфейсе настроек сайта.

  2. Если ваша система управления обучением гарантирует, что адреса электронной почты пользователей были проверены, включите настройку сайта lti email verified. :warning: Внимание: Если ваша LMS не проверяет адреса электронной почты, включение lti email verified представляет собой риск для безопасности.

  3. Включите настройку сайта lti enabled

Если эти инструкции не подходят для вашей LMS, пожалуйста, оставьте сообщение в теме ниже, и мы сделаем все возможное, чтобы обновить инструкции соответственно.

Что делать, если для моего сайта требуется приглашение (invite_required)?

Если вы хотите, чтобы ваши пользователи проходили процесс активации приглашения Discourse при первом входе, вы можете использовать «Свойства пользовательских данных» (Custom Properties) LTI для указания ссылки на приглашение Discourse. Новые пользователи будут перенаправлены на приглашение, а существующие пользователи — на обычный URL запуска. Например:

Имя свойства Значение свойства
discourse_invite_link https://discourse.example.com/invites/abcdefg

Часто задаваемые вопросы

Поддерживает ли плагин интеграцию с несколькими системами управления обучением одновременно?

  • На данный момент плагин поддерживает подключение только одной LMS к сайту. Настройка сайта LTI client IDs принимает несколько значений, но это связано с тем, что некоторые системы LMS устанавливают один идентификатор клиента для каждого курса.
23 лайка

У вас есть конкретные инструкции по интеграции LTI с Canvas LMS?

1 лайк

Вам потребуется, чтобы интеграцию выполняли ваши администраторы

Я один из администраторов и также программист. Я считаю, что проблема, с которой я столкнулся, связана с несоответствием куки и параметра «state» между Discourse и Canvas.

Вот ошибка, которую я получаю в логах Discourse:

(lti) Authentication failure! state_mismatch: StandardError, State parameter did not match the session

Думаю, эта ошибка выбрасывается здесь: discourse-lti/lib/discourse_lti/lti_omniauth_strategy.rb at main · discourse/discourse-lti · GitHub

Есть ли какие-либо идеи или направления для отладки? На этой странице документации Canvas: Overview of an LTI Launch <a name="launch-overview"></a> - Canvas LMS REST API Documentation

Есть раздел «Запуск без куки», который, как мне кажется, здесь актуален. Но я не уверен на 100%. Любая помощь или комментарии будут очень полезны.

Мне удалось настроить LTI в Canvas с одним важным нюансом. Вот мои шаги:

  1. Создайте ключ разработчика в Canvas. Неважно, что вы укажете в методах JWK и публичном JWK.

  2. В настройках LTI для Discourse заполните соответствующие поля.

  3. Для публичного ключа перейдите по адресу https://<your_canvas_url>/api/lti/security/jwks и скопируйте второй ключ. Затем откройте https://8gwifi.org/jwkconvertfunctions.jsp, вставьте скопированное значение и выполните преобразование. Далее скопируйте текст между -----BEGIN/END PUBLIC KEY----- и вставьте его в поле Публичный ключ платформы LTI в настройках LTI для Discourse. После этого сохраните изменения.

Теперь о нюансе: ключи JWK, генерируемые Canvas, периодически обновляются, судя по всему, раз в месяц. Как только второй ключ изменится, LTI перестанет работать, и вам придётся снова выполнить шаг 3, чтобы заменить его на новый.

Плагин LTI для Discourse должен поддерживать ссылку на публичный JWK, чтобы оставаться актуальным.

2 лайка

Можно ли интегрировать несколько LMS с одним Discourse?

:partying_face: Этот плагин теперь включён в ядро Discourse в рамках Bundling more popular plugins with Discourse core. Если вы используете самохостинг и применяете этот плагин, вам необходимо удалить его из файла app.yml перед следующим обновлением.

3 лайка