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

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

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

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

  1. Создайте новую запись «Инструмент» в вашей системе управления обучением:
  • Версия LTI: 1.3
  • URL запуска: любой URL вашего сайта. После входа пользователи будут перенаправлены сюда.
  • URL запроса авторизации: https://<your-discourse-site>/auth/lti/initiate
  • URL перенаправления: https://<your-discourse-site>/auth/lti/callback
  • Открытый ключ инструмента — оставьте пустым. Discourse никогда не отправляет данные в LMS.
  1. В вашей LMS найдите «Конечную точку авторизации», «ID клиента инструмента», «Идентификатор эмитента платформы» и «Открытый ключ платформы», затем добавьте их в соответствующие настройки сайта в Discourse. В интерфейсе настроек сайта Discourse эти параметры можно найти, выполнив поиск по слову lti.

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

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

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

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

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

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

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

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

  • На данный момент плагин поддерживает подключение только одной LMS к сайту. Настройка сайта LTI client IDs принимает несколько значений, но это связано с тем, что некоторые системы LMS устанавливают отдельный ID клиента для каждого курса.
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 лайка