Discourse 学习管理系统集成(LTI 1.3 认证)

:discourse2: 摘要 Discourse LTI 允许 Discourse 通过 LTI 1.3 标准 与多种学习管理系统集成。
:open_book: 安装指南 此插件已包含在 Discourse 核心中。无需单独安装该插件。

该插件实现了 LTI 1.3 认证标准,该标准被多种学习管理系统支持。在 LTI 标准中,Discourse 充当“工具”角色。配置完成后,用户只需点击学习管理系统上的按钮或链接,即可立即登录 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”、“平台颁发者 ID
23 个赞

您是否有关于将 LTI 集成与 Canvas LMS 集成的具体说明?

1 个赞

您需要由管理员来完成集成

我是我们的管理员之一,也是一名软件工程师。我认为我遇到的问题与 cookie 以及 Discourse 和 Canvas 之间的“状态”不匹配有关。

这是我在 Discourse 日志中看到的错误:

(lti) 身份验证失败!state_mismatch: StandardError, State 参数与会话不匹配

我认为该错误是从此处抛出的: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

有一个“无 cookie 启动”部分,我认为这与此处相关。但我也不能 100% 确定。任何帮助或见解都将不胜感激。

我在 Canvas 中成功地让 LTI 正常工作了,但有一个注意事项。以下是我的步骤:

  1. 在 Canvas 中创建一个开发者密钥。您在 JWK 方法和公共 JWK 中填写什么并不重要

  2. 在 Discourse LTI 设置中,填写您的设置

  3. 对于公钥,您可以导航到 https://\u003cyour_canvas_url\u003e/api/lti/security/jwks 并复制第二个密钥。然后您可以转到 https://8gwifi.org/jwkconvertfunctions.jsp 并将其粘贴到其中进行转换。然后复制 -----BEGIN/END PUBLIC KEY----- 之间的文本,并将其粘贴到 Discourse LTI 设置中的LTI 平台公钥中。然后保存。

注意事项如下。Canvas 生成的 JWK 会被轮换,似乎是每月一次。一旦第二个密钥发生更改,LTI 将会中断,您需要按照步骤 3 替换为新的密钥。

Discourse LTI 插件必须支持公共 JWK URL 才能保持最新。

2 个赞

我可以将多个 LMS 集成到一个 Discourse 吗?

:partying_face: 此插件现已作为 Bundling more popular plugins with Discourse core 的一部分,与 Discourse 核心捆绑在一起。如果您是自托管用户并使用了此插件,则需要在下次升级前将其从 app.yml 中删除。

2 个赞