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://<您的 Discourse 站点>/auth/lti/initiate
  • 重定向 URL:https://<您的 Discourse 站点>/auth/lti/callback
  • 工具公钥:留空。Discourse 不会向 LMS 发送任何数据
  1. 在您的 LMS 中,找到“授权端点”、“工具客户端 ID”、“平台发行者 ID"和“平台公钥”,并将它们添加到 Discourse 的相关站点设置中。在 Discourse 中,可以通过在站点设置 UI 中搜索 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
22 个赞

您是否有关于将 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 中删除。

1 个赞