Integración del Sistema de Gestión de Aprendizaje Discourse (Autenticación LTI 1.3)

:discourse2: Summary Discourse LTI allows Discourse to integrate with a number of learning management systems via the LTI 1.3 standard.
:open_book: Install Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.

This plugin implements the LTI 1.3 standard for authentication, which is supported by a number of learning management systems. Discourse acts as a “Tool” within the LTI standard. Once configured, users will be able to click a button/link on the learning management system, and instantly be logged into Discourse.

Precise setup instructions will vary based on your Learning Management System. But in general:

  1. Create a new “Tool” entry in your learning management system
  • LTI Version: 1.3
  • Launch URL: any URL on your site. Users will be directed here after login
  • Auth Request URL: https://<your-discourse-site>/auth/lti/initiate
  • Redirect URL: https://<your-discourse-site>/auth/lti/callback
  • Tool Public Key - leave blank. Discourse never sends data to the LMS
  1. In your LMS, find the 'Authorization endpoint", “Tool Client ID”, “Platform Issuer ID”, and the “Platform Public Key”, and add them to the relevant site settings in Discourse. In Discourse, the settings can be found by searching for lti in the Discourse site settings UI.

  2. If your learning management system guarantees User emails have been validated, enable the lti email verified site setting. :warning: Warning: If your LMS does not verify emails, enabling lti email verified is a security risk.

  3. Turn on the lti enabled site setting

If these instructions don’t make sense for your LMS, please post in the topic below and we’ll do our best to update the instructions accordingly.

What if my site is invite_required?

If you want your users to go through the Discourse invite redemption flow when they first log in, you can use LTI “Custom Properties” to specify a Discourse invite link. New users will be directed to the invite, while existing users will be sent to the regular launch URL. For example:

Property Name Property Value
discourse_invite_link https://discourse.example.com/invites/abcdefg

Last edited by @tobiaseigen 2025-07-16T21:17:34Z

Check documentPerform check on document:
22 Me gusta

¿Tiene instrucciones específicas para integrar la integración LTI con Canvas LMS?

1 me gusta

Necesitarás que tus administradores sean quienes realicen la integración.

Soy uno de nuestros administradores y también ingeniero de software. Creo que el problema que tengo tiene que ver con las cookies y que el “estado” entre Discourse y Canvas no coincide.

Este es el error que estoy recibiendo en los registros de Discourse:

(lti) Fallo de autenticación! state_mismatch: StandardError, El parámetro de estado no coincidió con la sesión

Creo que ese error se está lanzando desde aquí: discourse-lti/lib/discourse_lti/lti_omniauth_strategy.rb at main · discourse/discourse-lti · GitHub

¿Alguna idea o algo que pueda investigar para ayudar a depurar esto? En esta página de la documentación de Canvas: Overview of an LTI Launch <a name="launch-overview"></a> - Canvas LMS REST API Documentation

Hay una sección de Lanzamiento sin cookies que creo que es relevante aquí. Pero no estoy 100% seguro. Cualquier ayuda o información sería muy apreciada.

Pude hacer que el LTI funcionara en Canvas con una advertencia. Aquí están mis pasos:

  1. Cree una clave de desarrollador en Canvas. No importa lo que ponga en JWK Method y Public JWK

  2. En la configuración de Discourse LTI, complete su configuración

  3. Para la clave pública, puede navegar a https://\u003cyour_canvas_url\u003e/api/lti/security/jwks y copiar la segunda clave. Luego puede ir a https://8gwifi.org/jwkconvertfunctions.jsp y pegarla allí y convertirla. Luego copie el texto entre -----BEGIN/END PUBLIC KEY----- y péguelo en la Clave pública de la plataforma Lti en la configuración de Discourse LTI. Luego guarde.

Aquí está la advertencia. Esos JWK que Canvas genera se rotan, aparentemente mensualmente. Una vez que esa segunda clave cambie, el LTI se romperá y deberá reemplazarla con la nueva siguiendo el Paso 3.

El plugin LTI de Discourse tendrá que admitir una URL de JWK pública para que se mantenga actualizado.

2 Me gusta

¿Puedo tener múltiples LMS integrados con un solo Discourse?

:partying_face: Este plugin ahora está incluido en el núcleo de Discourse como parte de Bundling more popular plugins with Discourse core. Si te autoalojas y usas el plugin, necesitas eliminarlo de tu app.yml antes de tu próxima actualización.

1 me gusta