Integração do Discourse Learning Management System (Autenticação 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 curtidas

Você tem instruções específicas para integrar a integração LTI com o Canvas LMS?

1 curtida

Você precisará que seus administradores realizem a integração

Sou um dos nossos administradores e também um engenheiro de software. Acho que o problema que estou tendo tem a ver com cookies e o “estado” entre o Discourse e o Canvas não estarem correspondendo.

Este é o erro que estou recebendo nos logs do Discourse:

(lti) Falha na autenticação! state_mismatch: StandardError, O parâmetro State não correspondeu à sessão

Acho que esse erro está sendo gerado daqui: discourse-lti/lib/discourse_lti/lti_omniauth_strategy.rb at main · discourse/discourse-lti · GitHub

Alguma ideia ou algo que eu possa investigar para ajudar a depurar isso? Nesta página na Documentação do Canvas: Overview of an LTI Launch <a name="launch-overview"></a> - Canvas LMS REST API Documentation

Há uma seção “Launching without Cookies” que acho que é relevante aqui. Mas não tenho 100% de certeza. Qualquer ajuda ou insight seria muito apreciado.

Consegui fazer o LTI funcionar no Canvas com uma ressalva. Aqui estão meus passos:

  1. Crie uma Chave de Desenvolvedor no Canvas. Não importa o que você coloque no Método JWK e JWK Público

  2. Nas configurações do LTI do Discourse, preencha suas configurações

  3. Para a chave pública, você pode navegar até https://\u003cyour_canvas_url\u003e/api/lti/security/jwks e copiar a segunda chave. Em seguida, você pode ir para https://8gwifi.org/jwkconvertfunctions.jsp e colar lá e converter. Em seguida, copie o texto entre -----BEGIN/END PUBLIC KEY----- e cole isso na Chave pública da plataforma Lti nas configurações do LTI do Discourse. Em seguida, salve.

Aqui está a ressalva. Esses JWKs que o Canvas gera são rotacionados, aparentemente mensalmente. Assim que essa segunda chave mudar, o LTI quebrará e você precisará substituí-la pela nova, seguindo o Passo 3.

O plugin LTI do Discourse terá que suportar uma URL JWK Pública para se manter atualizado.

2 curtidas

Posso ter múltiplos LMSs integrados com um único Discourse?

:partying_face: Este plugin agora está incluído no core do Discourse como parte de Bundling more popular plugins with Discourse core. Se você auto-hospeda e usa o plugin, precisa removê-lo do seu app.yml antes da sua próxima atualização.

1 curtida